魔術方法是php物件導向中特有的特性。它們在特定的情況下被觸發,都是以雙下劃線開頭,你可以把它們理解為鉤子,利用模式方法可以輕鬆實現
php物件導向中過載(overloading即動態建立類屬性和方法)。魔術方法很多還是成對出現的,以下列出目前php中所有的模式方法。
1.__construct,__destruct
__constuct構建物件的時被呼叫;
__destruct明確銷毀物件或指令碼結束時被呼叫;
2.__get,__set
__set當給不可訪問或不存在屬性賦值時被呼叫
__get讀取不可訪問或不存在屬性時被呼叫
3.__isset,__unset
__isset對不可訪問或不存在的屬性呼叫isset()或empty()時被呼叫
__unset對不可訪問或不存在的屬性進行unset時被呼叫
4.__call,__callstatic
__call呼叫不可訪問或不存在的方法時被呼叫
__callstatic呼叫不可訪問或不存在的靜態方法時被呼叫
5.__sleep,__wakeup
__sleep當使用serialize時被呼叫,當你不需要儲存大物件的所有資料時很有用
__wakeup當使用unserialize時被呼叫,可用於做些物件的初始化操作
6.__clone
進行物件clone時被呼叫,用來調整物件的轉殖行為
7.__tostring
當乙個類被轉換成字串時被呼叫
8.__invoke
當以函式方式呼叫物件時被呼叫
9.__set_state
當呼叫var_export()匯出類時,此靜態方法被呼叫。用__set_state的返回值做為var_export的返回值。
10.__debuginfo
當呼叫var_dump()列印物件時被呼叫(當你不想列印所有屬性)適用於php5.6版本
<?php
class magic
//某個物件的引用都被刪除、物件被銷毀、呼叫exit()後、指令碼關閉時被呼叫
public function __destruct()
//當給不可訪問或不存在屬性賦值時被呼叫
public function __set($name, $value)
//讀取不可訪問或不存在屬性時被呼叫
public function __get($name)
//呼叫不可訪問或不存在的方法時被呼叫
public function __call($name, $arguments)
//呼叫不可訪問或不存在的靜態方法時被呼叫
public static function __callstatic($name, $arguments)
//對不可訪問或不存在的屬性呼叫isset()或empty()時被呼叫
public function __isset($name)
//對不可訪問或不存在的屬性進行unset時被呼叫
public function __unset($name)
//serialize時被呼叫,當你不需要儲存大物件的所有資料時很有用
public function __sleep()
//unserialize時被呼叫,可用於做些物件的初始化操作
public function __wakeup()
//當乙個類被轉換成字串時被呼叫
public function __tostring()
//進行物件clone時被呼叫,用來調整物件的轉殖行為
public function __clone()
//當以函式方式呼叫物件時被呼叫
public function __invoke()
//當呼叫var_export()匯出類時,此靜態方法被呼叫。用__set_state的返回值做為var_export的返回值。
public static function __set_state($arr)
//當呼叫var_dump()列印物件時被呼叫(當你不想列印所有屬性)適用於php5.6版本
public function __debuginfo($arr)
} $m = new magic(); //__construct()被呼叫
$m->not_exist_property = test; //__set()被呼叫
echo $m->not_exist_property;//__get()被呼叫
$m->abc(1,2,3); //__call()被呼叫
echo isset($m->not_exist_property); //__isset()被呼叫,返回bool值
unset($m->not_exist_property); //__unset()被呼叫
echo $tmp = serialize($m); //__sleep()被呼叫
unserialize($tmp); //__wakeup()被呼叫
$m(); //__invoke()
eval( '$m2 = ' . var_export ( $m , true ) . ';' );var_dump($m2);
var_dump($m);
//最後__destruct()被呼叫 /*
結果:__construct called
not_exist_property-test__set called
not_exist_property__get called
abc-1,2,3__call called
not_exist_property__isset called
1not_exist_property__unset called
__sleep called
o:5:"magic":1:__wakeup called
__destruct called
__clone called
__invoke called
string(20) "__set_state called
"class magic#1 (1)
__destruct called
__destruct called
*/
php魔術常量,魔術方法
魔術常量 1。line 返回檔案中的當前行號。2。file 返回檔案的完整路徑和檔名。如果用在包含檔案中,則返回包含檔名。自php4.0.2 起,file 總是包含乙個絕對路徑,而在此之前的版本有時會包含乙個相對路徑。3。function 返回函式名稱 php4.3.0 新加 自php5 起本常量返...
invoke 魔術 PHP 魔術方法
php 魔術方法 構造方法 construct 析構方法 destruct get 與 set unset call 和 callstatic sleep 和 wakeup clone tostring invoke set state debuginfo construct 這個方法應該是最常用的...
php魔術方法
php5魔術方法 魔術函式 1。construct 建構函式 例項化物件時被呼叫,當 construct和以類名為函式名的建構函式同時存在時,construct將被呼叫,另乙個不被呼叫。2。destruct 析構函式 當刪除乙個物件或物件操作終止時被呼叫 程式結束後物件就摧毀 永遠都是最後執行的。3...