PHP高階特性 魔術方法 魔術常量

2021-09-19 08:15:20 字數 4029 閱讀 1036

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