在本系列中,我將介紹 PHP 物件導向程式設計 (OOP) 的基礎知識。內容將被組織成連續的部分,每個部分都專注於一個特定的主題。如果您是初學者或不熟悉 OOP 概念,本系列旨在逐步指導您。 在這一部分中,我將討論 PHP 中的多態性。讓我們一起開始學習PHP OOP的旅程吧!
現在我們將學習多態性。多態性是什麼意思?術語“多態性”有兩個部分。一是“Poly”,意思是“多”,另一個是“Morphism”,意思是形式。因此,多態性意味著多種形式或多種形式。在程式設計的上下文中,當使用術語多態性時,我們可以使用兩個概念來實現它。
第一個概念是方法重載,也稱為編譯時多態性。
方法重載的工作原理是這樣的:假設我們在一個類別中有一個方法,它帶有一個參數。如果我們聲明另一個具有完全相同名稱但具有多個參數的方法,那麼它是有效的。這意味著我們可以在一個類別中聲明兩個同名的方法,但參數的數量必須不同。稍後,當我們建立此類的實例並使用這些方法時,決定呼叫哪個方法將取決於傳遞給它的參數數量。因此,相同的方法將根據參數的不同而表現不同。現在讓我們看一下範例程式碼。
class Vehicle { public function getTotal($first, $second) { echo $first . " " . $second . "\n"; } public function getTotal($first, $second, $third) { echo $first . " " . $second . " " . $third . "\n"; } } $vehicle = new Vehicle(); $vehicle->getTotal(10, 20); $vehicle->getTotal(10, 20, 30);
這裡我們可以看到Vehicle類別中宣告了兩個名為getTotal的方法。這兩種方法採用不同的參數。現在,當我們建立 Vehicle 類別的實例並使用這些方法時,它們的行為取決於提供的參數。例如,在建立 Vehicle 類別的實例後,首先使用 2 個參數呼叫 getTotal 方法,從而導致呼叫該類別的第一個 getTotal 方法。然後,再次使用 3 個參數呼叫 getTotal 方法,從而呼叫該類別的第二個 getTotal 方法。因此,我們可以理解相同的方法如何表現出不同的行為。
但是,如果你執行這段程式碼,它不會運作,因為 PHP 不支援方法重載或編譯時多態性。但它確實支援方法重寫或運行時多態性。我們只是用這個例子來從理論上理解這個概念。
第二個概念是方法重寫,也稱為運行時多態性。
方法重寫的工作原理如下:假設類別中有一個方法,它可能會也可能不會接受參數並執行特定任務。如果這個類別被另一個類別繼承,並且在子類別中聲明了一個完全相同名稱的方法,這個過程稱為方法重寫或運行時多態。也就是說,我們可以在子類別中宣告一個同名的方法,參數的數量可以相同也可以不同。它將執行不同的任務。稍後,當我們建立子類別的實例並使用該方法時,將根據傳遞的參數來決定是從父類別還是子類別中呼叫該方法。因此,相同的方法將根據參數表現出不同的行為或動作。現在讓我們看一下範例程式碼。
class Vehicle { public function getTotal($first, $second) { echo $first . " " . $second . "\n"; } public function getTotal($first, $second, $third) { echo $first . " " . $second . " " . $third . "\n"; } } $vehicle = new Vehicle(); $vehicle->getTotal(10, 20); $vehicle->getTotal(10, 20, 30);
當子類別實例中使用兩個參數呼叫 getTotal 方法時,它會在執行時間檢查子類別中是否存在這樣一個具有兩個參數的方法。如果沒有,子類別將繼承並呼叫父類別的方法。
稍後,當再次呼叫具有三個參數的 getTotal 方法時,它會再次檢查子類別中是否存在具有三個參數的方法。當發現該方法已在子類別中重寫(具有三個參數)時,它會從子類別中呼叫 getTotal 方法。
如果父類別和子類別都有參數相同的方法,則在這種情況下也會呼叫子類別中重寫的方法。
這本質上就是方法重寫的工作原理。現在我們了解如何重寫方法及其操作方式。
我希望這次討論能讓您對本課所涵蓋的主題有初步的了解。這就是今天的全部內容;我們下一課見。
您可以在 GitHub 和 Linkedin 上與我聯絡。
以上是PHP OOP 部分多態性的詳細內容。更多資訊請關注PHP中文網其他相關文章!