簡體   English   中英

spl_autoload_register的工作方式說明

[英]spl_autoload_register way of working clarification

我正在使用此方法加載類:

spl_autoload_register(function($class) {
    require_once 'classes/' . $class . '.php';
});

我仍在努力了解有關該功能的一些信息。

據我了解,每當我創建一個對象實例時,它將觸發該函數並加載objcet的類。

因此,如果我要執行以下操作:

$myObj = new myObj();

該函數將捕獲這種脫節,並需要require_once 'classes/myObj.php'

如果我創建另一個實例會怎樣? 例如:

$myObj1 = new myObj();
$myObj2 = new myObj();

會觸發兩次功能嗎? 還是注意到它是同一個類,所以它不會兩次delcare? 無論如何,這就是為什么我使用了require_once的原因,所以不會出現過載。 但是,我仍然想知道它的實際作用。

還有一件事,為什么當我在執行這樣的代碼時:

echo someOtherClass::getDesc();

該函數仍將其識別為類,然后需要文件classes/someOtherClass.php 為什么會這樣呢? 實際上,我還沒有聲明一個新對象,沒有一個對象是someOtherClass的實例。 這是否意味着每當我使用對象函數時,它將嘗試包含該類? 還是什么時候使用靜態函數?

提前致謝!

基本上,在遇到未定義的類時,它將在每次調用后逐個調用調用自動加載堆棧中注冊的函數,以檢查是否定義了該類,如果已停止,則停止調用加載程序並返回腳本執行。

因此,它實際上與require_once相同,是的,對未聲明類的靜態方法的調用會觸發自動加載。

您可以將自動加載視為“未聲明的類”處理程序的異常,這是為了對其進行修復,以便您的腳本可以繼續進行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM