php中的"過載"與其它絕大多數物件導向語言不同。傳統的"過載"是用於提供多個同名的類方法,但各方法的引數型別和個數不同。
php所提供的"過載"(overloading)是指動態地"建立"類屬性和方法,是通過魔術方法(magic methods)來實現的。
具體來說分為兩類:
1.屬性過載
public void __set ( string $name , mixed $value )
public mixed __get ( string $name )
public bool __isset ( string $name )
public void __unset ( string $name )
在給不可訪問屬性賦值時,__set() 會被呼叫。
讀取不可訪問屬性的值時,__get() 會被呼叫。
當對不可訪問屬性呼叫 isset()
或 empty()
時,__isset() 會被呼叫。
當對不可訪問屬性呼叫 unset()
時,__unset() 會被呼叫。
引數 $name 是指要操作的變數名稱。__set() 方法的 $value 引數指定了 $name 變數的值。
注意:屬性過載只能在物件中進行。在靜態方法中,這些魔術方法將不會被呼叫。所以這些方法都不能被 宣告為
static。從 php 5.3.0 起, 將這些魔術方法定義為
static 會產生乙個警告。
2.方法過載
public mixed __call ( string $name , array $arguments )
public static mixed __callstatic ( string $name , array $arguments )
在物件中呼叫乙個不可訪問方法時,__call() 會被呼叫。
用靜態方式中呼叫乙個不可訪問方法時,__callstatic() 會被呼叫。
$name 引數是要呼叫的方法名稱。$arguments 引數是乙個列舉陣列,包含著要傳遞給方法 $name 的引數。
PHP中的過載
先區分一下過載 overload 和重寫 override 過載指多個名字相同,但引數不同的函式在同一作用域並存的現象 重寫出現在繼承中,指子類重定義父類功能的現象,也被稱為覆蓋。過載中說的引數不同有三種情況 引數個數不同,引數型別不同,引數順序不同。重寫一般指函式的覆蓋,即相同簽名的成員函式在子類...
PHP中的過載
先區分一下過載 overload 和重寫 override 過載指多個名字相同,但引數不同的函式在同一作用域並存的現象 重寫出現在繼承中,指子類重定義父類功能的現象,也被稱為覆蓋。過載中說的引數不同有三種情況 引數個數不同,引數型別不同,引數順序不同。重寫一般指函式的覆蓋,即相同簽名的成員函式在子類...
php中過載的概念
class stu stu1 new stu stu1 name xiaoming 屬性不存在 為物件自動新增 stu1 getname 不存在 報錯 上例中 定義了乙個stu類,類內只有 age屬性,當將其實例化後,由於類內未定義name屬性,stu1物件新增了該屬性,並對該屬性賦值。所以相當於該...