PHP 的自動載入(持續學習更新中)

LittleLittleBig發表於2022-02-15

訪問不存在的類時會怎麼樣

校驗程式碼

<?php

function __autoload($className) {
    echo ("from autoload:" . $className . PHP_EOL);
}

spl_autoload_register(function ($className) {
    echo ("from spl - 1:" . $className . PHP_EOL);
});

spl_autoload_register(function ($className) {
    echo ("from spl - 2:" . $className . PHP_EOL);
});

$notExist = new AnotherNotExist();

PHP 的自動載入(持續學習更新中)

要點說明

  1. 方框1:__autoload() 函式已不建議使用,推薦使用程式碼中的 spl_autoload_register()__autoload() 的作用是引入沒有找到的類,它接受的引數,即已知的條件是這個類的類名,所以引入的核心根據類名找到類檔案所在目錄,從而引入。為什麼不使用 __autoload() 呢,因為 __autoload() 這個函式全域性只能定義一次,如果都在裡面定義類名和類檔案目錄的關係,這個函式將十分臃腫,因此 PHP5 開始建議使用 spl_autoload_register() 進行註冊。
  2. 方框2:當訪問不存在的類時,可以看到,走到了 spl_autoload_register() 函式(方框 2 輸出了想要訪問的類名)。因為程式碼中既有 spl_autoload_register(),也有 __autoload() 所以只訪問了 spl_autoload_register(),只有 __autoload() 時就會訪問 __autoload()
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章