PHP 常用魔術方法的觸發時機

2021-09-02 21:39:07 字數 1121 閱讀 6491

1)__autoload() :當程式例項化某個類,而該類沒有在當前檔案中被引入。此時會觸發執行__autoload()。程式希望通過該方法,自動引入這個類檔案。該方法有乙個引數,即就是那個忘記引入的類的名稱。__autoload()方法的工作原理是什麼?當程式執行到例項化某個類的時候,如果在例項化前沒有引入這個類檔案,那麼就自動執行__autoload()函式。這個函式會根據例項化的類的名稱來查詢這個類檔案的路徑,當判斷這個類檔案路徑下確實存在這個類檔案後,就執行include或者require來載入該類,然後程式繼續執行,如果這個路徑下不存在該檔案時就提示錯誤。使用自動載入的魔術函式可以不必要寫很多個include或者require函式。

2)__construct() :這個是魔術構造方法。構造方法是例項化物件的時候自動執行的方法,作用就是初始化物件。該方法可以沒有引數,也可以有多個引數。如果有引數,那麼new這個物件的時候要記得寫上相應的引數。在php5以前,沒有魔術構造方法,普通構造方法是乙個跟類名同名的方法來實現構造的。如果乙個類中既寫了魔術構造方法,又定義了普通構造方法。那麼php5以上版本中,魔術方法起作用,普通構造方法不起作用。反之,在php5以前版本中,不認識魔術構造方法,只是把該方法當做普通的方法。

3)__destruct() :這個是魔術析構方法。析構方法的作用和構造方法正好相反,是物件被銷毀時被自動呼叫的,作用是釋放記憶體。析構方法沒有引數。

4)__call() :當程式呼叫乙個不存在或不可見的成員方法時,自動觸發執行__call()。它有兩個引數,分別是未訪問到的方法名稱和方法的引數。而第二個引數是陣列型別。

5)__get() :當程式呼叫乙個未定義或不可見的成員屬性時,自動觸發執行__get()。它有乙個引數,表示要呼叫的屬性的名稱。

6)__set():當程式試圖寫入乙個不存在或不可見的成員屬性時,php就會自動執行__set()。它包含兩個引數,分別表示屬性名稱和屬性值。

7)__tostring() :當程式使用echo或print輸出物件時,會自動呼叫該方法。目的是希望通過該方法將物件轉化為字串,再輸出。__tostring() 無引數,但是該方法必須有返回值。

8)__clone() :當程式clone乙個物件的時候,能觸發__clone()方法,程式希望通過這個魔術方法實現:不僅僅單純地轉殖物件,還需要轉殖出來的物件擁有原來物件的所有屬性和方法。

php常用魔術方法

魔術方法和建構函式 construct和複製物件時自動呼叫的函式 clone相似,都是在執行某一操作時會被呼叫,通常和乙個關鍵字相連。通常情況下在類中會定義私有屬性,這是為了保護資料而使用的措施,但是也給我們帶來了麻煩。想要修改它們的值時,是通過呼叫我們定義的介面函式來完成的。每次需要修改變數都要呼...

php常用魔術方法

1.call 當使用乙個未定義的方法時呼叫此方法 2.autoload 使用尚未被定義的類時自動呼叫。通過此函式,指令碼引擎在 php 出錯失敗前有了最後乙個機會載入所需的類加粗樣式 3.construct 當乙個物件被建立時呼叫此方法,好處是可以使構造方法有乙個獨一無二的名稱,無論它所在的類的名稱...

PHP 常用的魔術方法

建構函式 construct 析構函式 destruct 當呼叫乙個未定義 包括沒有許可權訪問 的方法是呼叫此方法 call 處理靜態方法呼叫 callstatic 當呼叫乙個未定義的屬性時訪問此方法 get 給乙個未定義的屬性賦值時呼叫 set 當在乙個未定義的屬性上呼叫isset 函式時呼叫此方...