首頁 >後端開發 >PHP問題 >php有多態嗎

php有多態嗎

王林
王林原創
2019-10-10 17:51:333000瀏覽

php有多態嗎

一、什麼是多態?

多型其實就是根據參數不同而執行不同的方法。

二、php中的多態

多態的概念一般是強型別語言來談的,因為強型別語言它必須宣告參數型,例如一個手電筒物件的開啟方法其參數申明了只能是藍光,就不能傳其他光。但可以用父類渲染的方式使其多態,例如宣告一個光的父類,讓它顏色的光都繼承自這個光的父類,申明其參數為父類光,然後傳光的任何子類都可以,這就是強型的多型。

但php是弱型別的動態語言,不偵測參數類型,傳什麼都可以;但在php5.3版本可以宣告參數為某物件;當宣告參數為某一類別實例化後的物件時,就得用父類渲染的方式令其多態;

三、php多態的理解

php是物件導向的腳本語言,而我們都知道,物件導向的語言具有三大特性:封裝,繼承,多型。 php理應具有這三大特性。

封裝是類別的建置過程,php具有;php也具有繼承的特性。唯獨這個多態,php體現的十分模糊。原因是php是弱型別語言。

java的多型體現的十分清晰,大體分兩類:父類別引用指向子類別物件;介面引用指向實作介面的類別物件。 java宣告變數時都要給變數設定類型,所以存在什麼父類別引用和介面引用。而php則沒有這點體現,php宣告變數不需要給變數設定類型,一個變數可以指向不同的資料類型。所以,php不具有像java一樣的多態。

php不具有像java那種清晰的多態,不是代表php不具有多態性。看下面一個例子:

abstract class animal{
    abstract function fun();
}
class cat extends animal{
    function fun(){
        echo "cat say miaomiao...";
    }
}
class dog extends animal{
    function fun(){
        echo "dog say wangwang...";
    }
}
function work($obj){
    if($obj instanceof animal){
        $obj -> fun();
    }else{
        echo "no function";
    }
}
work(new dog()); 
work(new cat());

上邊的類別是抽象類別,也顯示了介面與實作介面的類別物件同樣可以適用。

推薦教學:PHP影片教學

#

以上是php有多態嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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