首頁  >  文章  >  後端開發  >  什麼是多型? php物件導向的多型實例教程

什麼是多型? php物件導向的多型實例教程

伊谢尔伦
伊谢尔伦原創
2017-06-29 09:53:482350瀏覽

什麼是多態性?

多態性是繼資料庫抽象化和繼承後,物件導向語言的第三個特徵。多態即多種形態,具有表現多種形態的能力特徵。在物件導向中表示根據物件的類型以不同方式處理。多態性允許每個物件以適合自身的方式去回應共同的訊息。多態性增強了軟體的靈活性和重用性。

如我們創建一個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 &#39;没有这个对象&#39;;  
    }
}
 
doing(new student()); // 学生正在上课
doing(new office());  // 职员正在上班

多態性也可以理解為一種程式設計方式,而程式設計最終目的無非就是:靈活,多型,重複使用,高效。

以上是什麼是多型? php物件導向的多型實例教程的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn