PHP魔術方法使用總結

2022-02-05 12:27:13 字數 3303 閱讀 2727

魔術方法是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魔術方法總結

php中的魔術方法都是以 開頭的,具有特殊作用的一些方法,可以看做php的語法糖。construct 構造器是乙個魔術方法,當物件被例項化時它會被呼叫。在乙個類宣告時它常常是第一件做的事但是沒得必要他也像其他任何方法在類中任何地方都可以宣告,構造器也能像其他方法樣繼承。如 構造方法示例,可以繼承重寫...

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...

PHP常用魔術方法總結

常用的魔術方法有 tostring call autoload clone get set isset unset 1.tostring 用於定義輸出物件引用時呼叫 常用於列印一些物件的資訊 必須有返回值 eg 有乙個 persion類 persion per new persion echo pe...