一、什麼是多態?
多型其實就是根據參數不同而執行不同的方法。
二、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中文網其他相關文章!