php多型的實現

2021-05-25 04:31:17 字數 1987 閱讀 1035

多型性是指相同的操作或函式、過程可作用於多種型別的物件上並獲得不同的結果。不同的物件,收到同一訊息將可以產生不同的結果,這種現象稱為多型性。

多型性允許每個物件以適合自身的方式去響應共同的訊息。多型性增強了軟體的靈活性和重用性。

在物件導向的軟體開發中,多型性是最為重要的部分之一。物件導向程式設計並不只是將相關的方法與資料簡單的結合起來,而是採用物件導向程式設計中的各種要素將現實生活中的各種情況清晰的描述出來。這一小節將對物件導向程式設計中的多型性作詳細的講解。

1.什麼是多型

多型(polymorphism)按字面上意思理解就是「多種形狀」。可以理解為多種表現形式,也即「乙個對外介面,多個內部實現方法」。在物件導向的理論中,多型性的一般定義為:同乙個操作作用於不同的類的例項,將產生不同的執行結果。也即不同類的物件收到相同的訊息時,將得到不同的結果。

在實際的應用開發中,採用物件導向中的多型主要在於可以將不同的子類物件都當作乙個父類來處理,並且可以遮蔽不同子類物件之間所存在的差異,寫出通用的**,做出通用的程式設計,以適應需求的不斷變化。

2.  多型的應用設計

在實際的應用開發中,通常為了使專案能夠在以後的時間裡的輕鬆實現擴充套件與公升級,需要通過繼承實現可復用模組進行輕鬆公升級。在進行可復用模組設計時,就需要盡可能的減少使用流程控制語句。此時就可以採用多型實現該類設計。

【示例】例舉了通常採用流程控制語句實現不同類的處理。其**如下所示。

<?php

class painter

}class typist

}function printworking($obj)elseif($obj instanceof typist)else

}printworking(new painter()); //顯示員工工作

printworking(new typist()); //顯示員工工作

?>

分析:在上述程式中,首先定義兩個員工類:油漆工類和打字員類。然後定義乙個處理函式,在該函式中,判斷員工是否為已經定義的員工,列印出員工的工作狀態。其結果如下所示。 

油漆工正在刷漆  

打字員正在打字

從以上程式可輕鬆看出,若想顯示其幾種員工的工作狀態,需要首先定義該員工類,並在該員工類中定義員工的工作,然後在printworking()函式中增加elseif語句以檢查物件是哪一員工類的例項。這在實際的應用中,是非常不可取的。若此時採用多型,則可以輕鬆解決此問題。

可以首先建立乙個員工父類,所有的員工類將繼承自該員工父類,並且繼承父類的所有方法與屬性。然後在員工類中建立「是一」關係,判斷是否為合法的員工。

【示例】例舉了採用多型的方式改寫上例。其**如下所示。

<?php

class employee

}class painter extends employee

}class typist extends employee

}class manager extends employee

}function printworking($obj)else

}printworking(new painter());//顯示油漆工的工作

printworking(new typist());//顯示打字員的工作

printworking(new manager());//顯示經理的工作

?>

分析:在上述程式中,首先定義乙個員工基類,並定義乙個員工工作狀態的方法。然後定義將繼承自員工基類的三個員工類:油漆工類、打字員類和經理類。然後定義顯示員工工作狀態的方法。並在該方法中建立乙個「是一」關係,用於判斷是否為合法的員工。其結果如下所示。

油漆工正在刷漆! 

打字員正在打字! 

經理正在開會!

從上例可發現,無論增加多少個員工類,只需要實現自員工父類繼承的該員工類和方法。而無須修改顯示員工工作狀態的方法printworking()。

多型 2 多型的實現原理

當類中宣告虛函式時,編譯器會在類中生成乙個虛函式表 虛函式表是乙個儲存類成員函式指標的資料結構 虛函式表是由編譯器自動生成與維護的 virtual成員函式會被編譯器放入虛函式表中 存在虛函式時,每個物件中都有乙個指向虛函式表的指標 vfptr指標 物件在建立的時,由編譯器對vfptr指標進行初始化 ...

多型定義 多型實現 多型分類。

1.多型定義 同一操作作用於不同的物件,可以有不同的解釋,產生不同的執行結果,這就是多型性。簡單的說 就是用基類的引用指向子類的物件。2.如何實現多型 c 中的多型只能通過指向基類型別的指標和引用來呼叫物件的虛函式來實現。實現多型有三種方式 虛方法,抽象方法,介面。虛方法 子類重寫父類中的方法,對父...

php 多型模式

多型性是指相同的操作或函式 過程可作用於多種型別的物件上並獲得不同的結果。不同的物件,收到同一訊息將可以產生不同的結果,這種現象稱為多型性。多型性允許每個物件以適合自身的方式去響應共同的訊息。多型性增強了軟體的靈活性和重用性。在物件導向的軟體開發中,多型性是最為重要的部分之一。物件導向程式設計並不只...