什麼是多態性?
多態性是繼資料庫抽象化和繼承後,物件導向語言的第三個特徵。多態即多種形態,具有表現多種形態的能力特徵。在物件導向中表示根據物件的類型以不同方式處理。多態性允許每個物件以適合自身的方式去回應共同的訊息。多態性增強了軟體的靈活性和重用性。
如我們創建一個doing()方法,如果是學生則列印上課,如是公司職員則列印上班。
普通做法
使用if判斷
/** * PHP多态性 */ // 定义学生类 class student{ public function cla(){ echo "学生工正在上课!<br />"; } } // 定义职员类 class office{ public function Wor(){ echo "职员正在上班!<br />"; } } // 判断对象类型方法 function doing($obj){ if($obj instanceof student){ $obj->cla(); }elseif($obj instanceof office){ $obj->wor(); }else{ echo "没有这个对象!"; } } doing(new student()); // 学生正在上课 doing(new office()); // 职员正在上班
以上結果輸出:
學生正在上課
職員正在上班
這種普通方法有個缺點,就是物件如果很多,那麼if..else..很長,不靈活。
多態性做法
定義一個公共抽象方法,所有子類別繼承它。
/** * PHP多态性 */ // 定义一个公共类 class pub{ protected function working(){ echo "本方法需要在子类中重载!"; } } // 定义学生类,继承公共类pub class student extends pub{ public function working(){ echo "学生工正在上课!<br />"; } } // 定义职员类,继承公共类pub class office extends pub{ public function working(){ echo "职员正在上班!<br />"; } } // 判断对象类型方法 function doing($obj){ if($obj instanceof pub){ $obj->working(); }else{ echo "没有这个对象!"; } } doing(new student()); // 学生正在上课 doing(new office()); // 职员正在上班
這就是多態的特性,靈活重複使用。
其它做法
從多型性的實作方式來看,無非就規範了每個類別都要重載父類別的一個方法,從而達到統一效果。而我們在定義類別的時候,自行加上統一的方法也可行。因此以上例子也可以這樣實現:
/** * PHP多态性 */ // 定义学生类 class student{ // 定义统一的方法pub public function pub(){ echo "学生工正在上课!<br />"; } } // 定义职员类 class office{ // 定义统一的方法pub public function pub(){ echo "职员正在上班!<br />"; } } // 判断对象类型方法 function doing($obj){ if($obj){ // 调用类的统一方法 $obj->pub(); }else{ echo '没有这个对象'; } } doing(new student()); // 学生正在上课 doing(new office()); // 职员正在上班
多態性也可以理解為一種程式設計方式,而程式設計最終目的無非就是:靈活,多型,重複使用,高效。
以上是什麼是多型? php物件導向的多型實例教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!