跳轉到內容

PHP 程式設計/覆蓋和過載

來自華夏公益教科書,開放的書籍,用於開放的世界

PHP 中的過載提供了動態“建立”屬性和方法的方式。這些動態實體透過可以在類中為各種操作型別建立的魔術方法進行處理。換句話說,在執行時建立屬性/方法被稱為屬性過載/方法過載。

屬性過載

[編輯 | 編輯原始碼]

在 PHP 中,屬性過載可以透過像 __set、__unset、__isset、__get 方法這樣的魔術方法完成。過載可以透過像 __call 和 __call_static 這樣的魔術方法完成。PHP 對“過載”的解釋與大多數面向物件的語言不同。過載傳統上提供了具有相同名稱但引數數量和型別不同的多個方法的能力。

範圍 返回型別 方法 引數 語法 額外說明
public void __set string $name , mixed $value public void __set ( string $name , mixed $value ) 在向不可訪問的屬性寫入資料時執行。
public mixed __get string $name public mixed __get ( string $name ) 用於從不可訪問的屬性讀取資料
public bool __isset string $name public bool __isset ( string $name ) 在對不可訪問的屬性呼叫 isset() 或 empty() 時觸發
public void __unset string $name public void __unset ( string $name ) 在對不可訪問的屬性使用 unset() 時呼叫。

方法過載

[編輯 | 編輯原始碼]

當我們嘗試呼叫 PHP 中不存在的方法時,會呼叫 __call(),這樣我們就實現了方法過載。

語法 描述
public mixed __call ( string $name , array $arguments ) __call() 在物件上下文中呼叫不可訪問的方法時觸發。
public static mixed __callStatic ( string $name , array $arguments ) __callStatic() 在靜態上下文中呼叫不可訪問的方法時觸發。

在 OOP 的意義上,覆蓋是在子類中替換父類方法。或者用簡單的技術術語來說,方法覆蓋意味著改變方法的行為。在 OOP 中,覆蓋是你可以重新宣告父類方法在子類中的過程。所以 OOP 中覆蓋的基本含義是改變父類方法的行為。

通常,當父類有一些方法,但在子類中你想用不同的行為使用相同的方法時,需要方法覆蓋。透過覆蓋方法,你可以完全改變它在父類中的行為。為了在 OOP 中實現方法覆蓋,我們通常在子類中建立相同的方法。


華夏公益教科書