php 中的特殊語法之魔術方法和魔術常量

2021-08-19 20:32:55 字數 2314 閱讀 1177

魔術方法與普通方法相比具有很大的不同,普通方法是根據使用者的實現方式進行呼叫,而魔術方法通常情況下使用者不會主動呼叫,而是在特定的時機被php系統自動呼叫,可以通俗的理解為事件監聽,php系統監聽到事件發生時才執行這些方法。在php中通常以 「 __ 」 雙下劃線打頭的方法作為魔術方法,所以使用者不要定義以雙下劃線開頭的方法。

對於魔術方法的使用需要了解兩個方面的內容:

一、魔術函式定義的位置

二、魔術函式呼叫的時機

下面**中所示php中常用的魔術方法的使用方法

方法名稱

使用方法

__construct()

建構函式會在每次例項化物件時先呼叫此方法,所以非常適合在使用物件之前做一些初始化工作

__destruct()

析構函式會在某個物件的所有引用都被刪除或者當物件被顯式銷毀時執行

__set()

用於屬性過載,在給不可訪問的屬性賦值時,__set() 會被呼叫

__get()

讀取不可訪問屬性的值時,__get()會被呼叫

__isset()

當對不可訪問屬性呼叫 isset() 或 empty() 時,__isset() 會被呼叫

__unset()

當對不可訪問屬性呼叫 unset() 時,__unset() 會被呼叫

__sleep()

serialize() 檢查類中是否有魔法方法 __sleep()。 如果存在,該函式將在任何序列化之前執行。它可以清除物件並返回乙個包含有該物件中應被序列化的所有變數名的陣列

__wakeup()

相反地,unserialize() 檢查是否具有魔術方法 __wakeup()。 如果存在,此函式可以用於重建物件

__tostring()

用於乙個類被當成字串時應該怎樣回應。例如: echo $object; 語句執行時,該方法會被呼叫

__invoke()

當嘗試以呼叫函式的方式呼叫乙個物件時,__invoke() 方法會被自動呼叫。例如: $object() 語句執行時,該方法會被呼叫

__clone()

如果定義了 __clone() 魔術方法,則新建立物件(複製生成物件)時, __clone() 方法會被呼叫,可用於修改屬性的值

__call()

在物件中呼叫乙個不可訪問的方法時,__call() 會被自動呼叫

__callstatic()

在靜態方式中呼叫乙個不可訪問的方法時,__callstatic() 會被呼叫

__autoload()

它會在試圖使用尚未被定義的類時自動呼叫

php 向它執行的任何指令碼提供了很多預定義常量。不過很多常量都是由不同的擴充套件庫定義的,只有在載入了這些擴充套件庫時才會出現,或者動態載入後,或者在編譯時已經包括進去了。同時,php 也在執行環境中提供了八個魔術常量,它們雖然被稱為魔術常量,但是它們的值隨著**中的位置改變而改變。例如: __line__ 的值就依賴於它在指令碼中所處的行來決定。

下面**中所示php中常用的魔術常量的使用方法

常量名稱

使用方法

__line__

檔案中的當前行

__file__

當前檔案的完整路徑和檔名。如果用在被包含檔案中,則返回被包含的檔名。自 php4.0.2 起, __file__ 總是包含乙個絕對路徑,而在此之前的版本有時會包含乙個相對路徑

__dir__

當前檔案所在的目錄。如果用在被包含檔案中,則返回被包含的檔案所在的目錄。它等價於 dirname(__file__)。除非是根目錄,否則目錄中名不包括末尾的斜槓

__function__

函式名稱 (php4.3.0新加的魔術常量)。自 php5 起該常量返回該函式被定義時的名字並區分大小寫。在 php4 中該值總是小寫字母

__class__

類的名稱 (php4.3.0新加的魔術常量)。自 php5 起該常量返回該類被定義時的名字並區分大小寫。在 php4 中該值總是小寫字母。類名包括其被宣告的命名空間 (如 foo\bar)。注意自 php5.4 起,__class__ 對 trait 也起作用。當用在 trait 方法中時, __class__ 是指呼叫 trait 方法的類的名字

__trait__

trait 的名字(php5.4.0新加的魔術常量)。自 php5.4 起,此常量返回 trait 被定義時的名字並區分大小寫,trait 名包括其被宣告的命名空間 (如 foo\traitbar)

__method__

類的方法名 (php5.0.0新加的魔術常量)。返回該方法被定義時的名字並區分大小寫

__namespace__

返回當前命名空間的名稱並區分大小寫 (php5.3.0新加的魔術常量)

PHP中的魔術方法之 call 和

對於這兩個方法的使用,不做過多的解釋,通過例項 和結果,大家可以更加清晰的認識兩者的作用 1.call 方法。當呼叫乙個沒有在類中宣告的方法時,可以呼叫 call 方法代替宣告乙個方法。接受方法名和陣列作為引數。例項 class test list new test list say 1,2,3 執...

PHP 魔術方法之 set 和

set 方法 這個方法用來為私有成員屬性設定值的,有兩個引數,第乙個引數為你要為設定值的屬性名,第二個引數是要給屬性設定的值,沒有返回值。這個方法同樣不用我們手工去呼叫,它也可以做成私有的,是在直接設定私有屬性值的時候自動呼叫的,同樣屬性私有的已經被封裝上了,如果沒有 set 這個方法,是不允許的,...

PHP魔術方法之 get 和

看 class stu public function set name,value s new stu var dump s a output 123 var dump s b output 123 var dump s c output null var dump s d output 0 va...