PHP魔術方法使用方法彙總

2022-10-06 09:42:09 字數 3231 閱讀 4768

魔術方法是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魔術方法使用例項如下:

<?php class magic

//某個物件的引用都被刪除、物件被銷毀、呼叫exit()後、指令碼關閉時被呼叫

public function __destruct()

//當給不可訪問或不存在屬性賦值時被呼叫

public function __set($name, $value)

//讀取不可訪問或不存在屬性時被呼叫

public functidacmryzon __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); //__unse程式設計客棧t()被呼叫

echo $tmp = serialize($m); //__sleep()被呼叫

unserialize($tmp); //__wakeup()被呼叫

$m1 = clone $m; //__clone()被呼叫,物件預設是引用傳遞,使用clone關鍵詞則可實現物件複製

$m(); //__invoke()

eval( '$m2 = ' . var_export ( $m , true ) . ';' );var_dump($m2);

vdacmryzar_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 cdacmryzalled

__destruct called

__clone called

__invoke called

string(20) "__set_state called

"class magic#1 (1)

__destruct called

__destruct called

*/

PHP魔術方法彙總

魔術方法是php物件導向中特有的特性。它們在特定的情況下被觸發,都是以雙下劃線開頭,在此做了下總結,向大家分享下 1.construct,destruct constuct構建物件的時被呼叫 destruct明確銷毀物件或指令碼結束時被呼叫 2.get,set set當給不可訪問或不存在屬性賦值時被...

PHP 魔術方法彙總

魔術方法 construct destruct call callstatic get set isset unset sleep wakeup tostring invoke set state clone 和 debuginfo 等方法在 php 中被稱為 魔術方法 magic methods ...

PHP魔術方法使用

php魔術方法的使用 php魔術方法的使用 1 get 和 set 2 call 和 callstatic 3 tostring 4 invoke 1 get 和 set 乙個php類檔案為 object.php class object private array array function s...