是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版本
1. __line__
返回檔案中的當前行號。
2. __file__
返回所在檔案的完整路徑。包含檔名
3. __function__
返回所在函式名稱。
4. __class__
返回所在類的名稱
5. __method__
返回所在類方法的名稱。
需要注意__method__返回的是"class::function"的形式,而__function__則返回"function"的形式。
6.__dir__
返回檔案所在的目錄。如果用在被包括檔案中,則返回被包括的檔案所在的目錄。
它等價於 dirname(__file__)。除非是根目錄,否則目錄中名不包括末尾的斜槓。不包含檔名。
7.__namespace__
當前命名空間的名稱(區分大小寫)。此常量是在編譯時定義的(php 5.3.0新增)。
8.__trait__
trait的名字(php 5.4.0新加)。自 php 5.4起此常量返回 trait 被定義時的名字(區分大小寫)。trait名包括其被宣告的作用區域(例如foo\bar)。
9、directory_separator :相容的目錄分隔符
魔術方法示例:
<?php
classmagic
//某個物件的引用都被刪除、物件被銷毀、呼叫exit()後、指令碼關閉時被呼叫
publicfunction __destruct()
//當給不可訪問或不存在屬性賦值時被呼叫
publicfunction __set($name, $value)
//讀取不可訪問或不存在屬性時被呼叫
publicfunction __get($name)
//呼叫不可訪問或不存在的方法時被呼叫
publicfunction __call($name, $arguments)
//呼叫不可訪問或不存在的靜態方法時被呼叫
publicstaticfunction __callstatic($name, $arguments)
//對不可訪問或不存在的屬性呼叫isset()或empty()時被呼叫
publicfunction __isset($name)
//對不可訪問或不存在的屬性進行unset時被呼叫
publicfunction __unset($name)
//serialize時被呼叫,當你不需要儲存大物件的所有資料時很有用
publicfunction __sleep()
//unserialize時被呼叫,可用於做些物件的初始化操作
publicfunction __wakeup()
//當乙個類被轉換成字串時被呼叫
publicfunction __tostring()
//進行物件clone時被呼叫,用來調整物件的轉殖行為
publicfunction __clone()
//當以函式方式呼叫物件時被呼叫
publicfunction __invoke()
//當呼叫var_export()匯出類時,此靜態方法被呼叫。用__set_state的返回值做為var_export的返回值。
publicstaticfunction __set_state($arr)
//當呼叫var_dump()列印物件時被呼叫(當你不想列印所有屬性)適用於php5.6版本
publicfunction __debuginfo($arr)
}$m =newmagic();//__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中的常量大部分都是不變的,但是有8個常量會隨著他們所在 位置的變化而變化,這8個常量被稱為魔術常量。這些魔術常量常常被用於獲得當前環境資訊或者記錄日誌。php中把以兩個下劃線 開頭的方法稱為魔術方法,這些方法在php中充當了舉足輕重的作用。魔術方法包括 建構函式和析構函式應該不陌生,他們在物件...
php魔術常量,魔術方法
魔術常量 1。line 返回檔案中的當前行號。2。file 返回檔案的完整路徑和檔名。如果用在包含檔案中,則返回包含檔名。自php4.0.2 起,file 總是包含乙個絕對路徑,而在此之前的版本有時會包含乙個相對路徑。3。function 返回函式名稱 php4.3.0 新加 自php5 起本常量返...
PHP魔術方法和魔術常量
具體的解釋如下 1。construct 例項化物件時被呼叫,當 construct和以類名為函式名的函式同時存在時,construct將被呼叫,另乙個不被呼叫。2。destruct 當刪除乙個物件或物件操作終止時被呼叫。3。call 物件呼叫某個方法,若方法存在,則直接呼叫 若不存在,則會去呼叫 c...