php魔術方法

構造函數:__construct()
實例化對象時被調用。
在類中,構造函數是用來初始化對象的,利用構造函數,可以操作對象,並改變它的值。
當__construct和以類名爲函數名的函數同時存在時,__construct將被調用,另一個不被調用。
當子類重寫了構造函數,子類被實例化時,只調用子類的構造函數,而父類的構造函數不被調用。
析構函數:__destruct()
當刪除一個對象或對象操作終止時被調用。
當該對象的所有引用都被刪除,或者對象被顯式銷燬時執行。
克隆函數:__clone()
當對象被拷貝(克隆)時直接調用。
如$a = new Action(); $a = $object;
__set($name, $value)
用$object->a = 17的方式給屬性賦值時,如果屬性a存在且是public型,那麼直接給屬性a賦值皆可;
如果屬性a不存在或者是protected/private型,就會調用__set($name, $value)方法。
二個參數:屬性、屬性值。
__get($name)
用$object->a的方式讀取對象的屬性時,如果屬性a存在且是public型,那麼直接返回該屬性的值;
如果屬性a不存在或者是protected/private修飾的不可直接訪問的類型,就會調該方法並以返回值爲準。
一般可以使用該方法使外部可限制性地訪問內部屬性,或者完成類似java中的反射操作。
__isset($name)
檢測一個對象的屬性是否存在時被調用。
如:isset($c->name),如果name不存在,則觸發該函數。
對不存在或者不可訪問的屬性使用isset()或者empty()時,__isset()會被調用。
__unset($name)
銷燬一個對象的屬性時被調用。
如:unset($c->name),如果name不存在,則觸發該函數。
當unset一個不存在或者不可訪問的屬性時,__unset()會被調用,否則直接unset該屬性皆可。
__call($name, $arguments)
當調用不存在或者不可訪問的方法時,會調用__call($name, $arguments)方法。
__callStatic($name, $arguments)
當在靜態方法中調用不存在或者不可訪問的方法時,會調用__callStatic($name, $arguments)方法。
這個方法 是PHP5.3裏才添加的,比較新。
__toString()
當打印對象時會被直接調用。如 echo $object; 或 print $obj;
注意:這時候php會拋出一個Catchable fatal error錯誤;用print_r打印對象不會觸發此函數。
__set_state()
用var_export()輸出一個對象時,__set_state()會被調用,輸出內容以該魔術方法的返回值爲準。
注:var_export()和var_dump()類似,只是var_export()輸出的內容符合php語法。
__autoload($name)
實例化一個對象時,如果對應的類不存在,則該方法被調用。
這個函數比較特殊,這個函數並不是作爲類的成員方法使用的。
注意:該方法是全局函數,參數是類的名稱。
可以用spl_autoload_register函數來定義其他的函數來代替__autoload
__sleep()
serialize之前被調用。若對象比較大,想刪減一點東東再序列化,可考慮一下此函數。
__wakeup()
unserialize時被調用,做些對象的初始化工作。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章