實(shí)例講解PHP面向?qū)ο笾鄳B(tài)
什么是多態(tài)性?
多態(tài)性是繼數(shù)據(jù)庫抽象和繼承后,面向?qū)ο笳Z言的第三個(gè)特征。多態(tài)即多種形態(tài),具有表現(xiàn)多種形態(tài)的能力特征。在面向?qū)ο笾斜硎靖鶕?jù)對(duì)象的類型以不同方式處理。多態(tài)性允許每個(gè)對(duì)象以適合自身的方式去響應(yīng)共同的消息。多態(tài)性增強(qiáng)了軟件的靈活性和重用性。
如我們創(chuàng)建一個(gè)doing()方法,如果是學(xué)生則打印上課,如是公司職員則打印上班。
普通做法
使用if判斷
/**
* PHP多態(tài)性
* 瓊臺(tái)博客
*/
// 定義學(xué)生類
class student{
public function cla(){
echo "學(xué)生工正在上課!<br />";
}
}
// 定義職員類
class office{
public function Wor(){
echo "職員正在上班!<br />";
}
}
// 判斷對(duì)象類型方法
function doing($obj){
if($obj instanceof student){
$obj->cla();
}elseif($obj instanceof office){
$obj->wor();
}else{
echo "沒有這個(gè)對(duì)象!";
}
}
doing(new student()); // 學(xué)生正在上課
doing(new office()); // 職員正在上班
以上結(jié)果輸出:
學(xué)生正在上課
職員正在上班
這種普通方法有個(gè)缺點(diǎn),就是對(duì)象如果很多,那么if..else..很長(zhǎng),不靈活。
多態(tài)性做法
定義一個(gè)公共抽象方法,所有子類繼承它。
/**
* PHP多態(tài)性
* 瓊臺(tái)博客
*/
// 定義一個(gè)公共類
class pub{
protected function working(){
echo "本方法需要在子類中重載!";
}
}
// 定義學(xué)生類,繼承公共類pub
class student extends pub{
public function working(){
echo "學(xué)生工正在上課!<br />";
}
}
// 定義職員類,繼承公共類pub
class office extends pub{
public function working(){
echo "職員正在上班!<br />";
}
}
// 判斷對(duì)象類型方法
function doing($obj){
if($obj instanceof pub){
$obj->working();
}else{
echo "沒有這個(gè)對(duì)象!";
}
}
doing(new student()); // 學(xué)生正在上課
doing(new office()); // 職員正在上班
這就是多態(tài)的特性,靈活重用。
其它做法
從多態(tài)性的實(shí)現(xiàn)方式來看,無非就規(guī)范了每個(gè)類都要重載父類的一個(gè)方法,從而達(dá)到統(tǒng)一效果。而我們?cè)诙x類的時(shí)候,自行加上統(tǒng)一的方法也可行。因此以上例子也可以這么實(shí)現(xiàn):
/**
* PHP多態(tài)性
* 瓊臺(tái)博客
*/
// 定義學(xué)生類
class student{
// 定義統(tǒng)一的方法pub
public function pub(){
echo "學(xué)生工正在上課!<br />";
}
}
// 定義職員類
class office{
// 定義統(tǒng)一的方法pub
public function pub(){
echo "職員正在上班!<br />";
}
}
// 判斷對(duì)象類型方法
function doing($obj){
if($obj){
// 調(diào)用類的統(tǒng)一方法
$obj->pub();
}else{
echo '沒有這個(gè)對(duì)象';
}
}
doing(new student()); // 學(xué)生正在上課
doing(new office()); // 職員正在上班
當(dāng)然,以上的例子不能說明多態(tài)性就能使用這樣的方式搞定,畢竟多態(tài)性在復(fù)雜的程序設(shè)計(jì)中,它能有效的達(dá)到靈活重用的特性。
多態(tài)性也可以理解為一種程序設(shè)計(jì)方式,而程序設(shè)計(jì)最終目的無非就是:靈活,多態(tài),重用,高效。
- php面向?qū)ο笾衧tatic靜態(tài)屬性和靜態(tài)方法的調(diào)用
- PHP 面向?qū)ο?final類與final方法
- PHP面向?qū)ο笾?深入理解static變量與方法
- PHP面向?qū)ο笕筇攸c(diǎn)學(xué)習(xí)(充分理解抽象、封裝、繼承、多態(tài))
- PHP面向?qū)ο蟮氖褂媒坛?簡(jiǎn)單數(shù)據(jù)庫連接
- PHP 面向?qū)ο笤斀?/a>
- PHP 的異常處理、錯(cuò)誤的拋出及回調(diào)函數(shù)等面向?qū)ο蟮腻e(cuò)誤處理方法
- PHP面向?qū)ο蟪绦蛟O(shè)計(jì)之接口用法
- php面向?qū)ο笾械哪g(shù)方法中文說明
- PHP面向?qū)ο缶幊炭焖偃腴T
- php面向?qū)ο蠡A(chǔ)詳解【星際爭(zhēng)霸游戲案例】
相關(guān)文章
ASP和PHP實(shí)現(xiàn)生成網(wǎng)站快捷方式并下載到桌面的方法
這篇文章主要介紹了PHP實(shí)現(xiàn)生成網(wǎng)站快捷方式并下載到桌面的方法,比加入收藏、設(shè)為首頁更給力哦,需要的朋友可以參考下2014-05-05
PHP字符串word末字符實(shí)現(xiàn)大小寫互換的方法
這篇文章主要介紹了PHP字符串word末字符實(shí)現(xiàn)大小寫互換的方法,是涉及PHP字符串轉(zhuǎn)換非常實(shí)用的技巧,需要的朋友可以參考下2014-11-11
php 使用 __call實(shí)現(xiàn)重載功能示例
這篇文章主要介紹了php 使用 __call實(shí)現(xiàn)重載功能,結(jié)合實(shí)例形式分析了PHP使用__call實(shí)現(xiàn)重載的相關(guān)操作技巧,需要的朋友可以參考下2019-11-11
利用static實(shí)現(xiàn)表格的顏色隔行顯示的代碼
利用static實(shí)現(xiàn)表格的顏色隔行顯示的代碼...2007-09-09
PHP轉(zhuǎn)Go之?dāng)?shù)組的正確使用詳解
這篇文章主要為大家對(duì)比一下PHP中的Array和Golang中的 Array&Slice&Map,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-09-09

