php魔術方法 autoload

2021-07-08 10:52:32 字數 1138 閱讀 9700

__autoload()方法是乙個特殊函式,它不是乙個類方法,而是單獨的函式,在類外被宣告,將在例項化乙個還沒被宣告的類中呼叫。

舉個栗子:

require_once('test/a.php');  

require_once('test/b.php');

require_once('test/c.php');

if (條件a) else

if (條件b)

這樣寫就會出現乙個問題,當在條件b下例項化b類時,其實是不需要引用a,c檔案的,所以栗子中的做法就會浪費一部分資源去編譯a,c兩個「無用的類」;所以這時候我們就可以使用__autoload()函式來解決這個問題。

function

__autoload

($classname) .php」;

if (is_readable($filepath))

} if (條件a) else

if (條件b)

當php引擎第一次使用類a,但是找不到時,會自動呼叫__autoload方法,並將類名「a」作為引數傳入。所以,我們需要的做的就是根據類名,找到對應的檔案,幷包含進來,如果我們的方法也找不到,那麼php引擎就會報錯。注意,這裡可以只用require,因為一旦包含進來後,php引擎再遇到類a時,將不會呼叫__autoload,而是直接使用記憶體中的類a,不會導致多次包含。

現在講一下autoload的執行機制,php在例項化乙個物件時(實際上在實現介面,使用類常數或類中的靜態變數,呼叫類中的靜態方法時都會如此),首先會在系統中查詢該類(或介面)是否存在,如果不存在的話就嘗試使用autoload機制來載入該類。而autoload機制的主要執行過程為:

(1) 檢查執行器全域性變數函式指標autoload_func是否為null。

(2) 如果autoload_func==null, 則查詢系統中是否定義有__autoload()函式,如果沒有,則報告錯誤並退出。

(3) 如果定義了__autoload()函式,則執行__autoload()嘗試載入類,並返回載入結果。

(4) 如果autoload_func不為null,則直接執行autoload_func指標指向的函式用來載入類。此時並不檢查__autoload()函式是否定義。

php魔術方法 autoload

參考 加上一點點自己的理解和疑惑 class 1.php class class 1 public function test class 2.php class class 2 extends class 1 如果要在main.php檔案中使用的class 1類的話,要先requireclass ...

php 魔術方法 autoload

php在魔術函式 autoload 方法出現以前,如果你要在乙個程式檔案中例項化100個物件,那麼你必須用include或者require包含進來100個類檔案,或者你把這100個類定義在同乙個類檔案中 相信這個檔案一定會非常大。但是 autoload 方法出來了,以後就不必為此大傷腦筋了,這個類會...

php魔術常量,魔術方法

魔術常量 1。line 返回檔案中的當前行號。2。file 返回檔案的完整路徑和檔名。如果用在包含檔案中,則返回包含檔名。自php4.0.2 起,file 總是包含乙個絕對路徑,而在此之前的版本有時會包含乙個相對路徑。3。function 返回函式名稱 php4.3.0 新加 自php5 起本常量返...