7.4 類的自動加載

當兩個 class 類分別對應兩個腳本文件的時候,雙方都不能在自己的文件中隨意的調用另一個類,需要通過 include 或是 require 引入后才實例化。

但如果一個腳本文件中引入了太多的腳本之后,又會顯得有點笨重了。

因此PHP提供了類的自動加載技術,原理是當你在實例化的時候,如果沒有前置引入,那么本來PHP會立即報錯并同時提示找不到這個 class 類的,但現在提供了一個機會,它會在當前環境中查找你是否有對spl_autoload_register等函數進行過處理,如果有的話,先將類名等信息丟過去看看,如果成功處理了這個錯誤的話,則相安無事,否則就報錯。

// 類的自動加載
spl_autoload_register(function($className){
    // 路徑分隔符,也就是 /
    $opt = DIRECTORY_SEPARATOR;
    // 完整路徑
    $path = __DIR__.$opt.'vendor'.$opt.'demo'.$opt.strtolower($className).".class.php";
    // 輸出路徑
    echo "<p>$path</p>";
    // 引入文件
    require_once($path);
});

// 實例化
$date = new Date();
// 打印屬性
var_dump($date);

// 實例化
$math = new Math();
// 打印屬性
var_dump($math);

spl_autoload_register() 函數的參數是一個回調函數,在這個回調函數中能獲得 你未經引用而直接調用的類名,再根據這個類名找到它對應的路徑,使用require引入,就能解決類名找不到的異常錯誤了。

更多相關內容可以查看官方提供的 SPL 標準庫

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在PHP開發過程中,如果希望從外部引入一個class,通常會使用include和require方法,去把定義這...
    四月不見閱讀 1,088評論 0 0
  • 自動加載函數--__autoload() 在Yii中有spl_autoload_register() 這個自動加載...
    洞房花豬閱讀 1,231評論 0 1
  • 一 預定義接口 1.1 遍歷 Traversable(遍歷)接口 檢測一個類是否可以被foreach遍歷,該接口不...
    coderhu閱讀 1,226評論 0 0
  • 說說PHP的autoLoad(http://www.cnblogs.com/yjf512/archive/2012...
    古則閱讀 466評論 0 1
  • Php:腳本語言,網站建設,服務器端運行 PHP定義:一種服務器端的HTML腳本/編程語言,是一種簡單的、面向對象...
    廖馬兒閱讀 2,197評論 2 38