自動載入
在編寫面相物件程式設計(OOP)程式時,PHP檔案頂部程式要引入檔案,如
include 'path/to/file1.php';
include 'path/to/file2.php';
你可能知道require(), require_once(), inclued(), inclued_onle()這些函式的作用。
如果只需載入幾個PHP指令碼,使用這些函式能很好的完成工作。如果一次需要引入上百個PHP指令碼,甚至更多,這時候這些函式就無法勝任。
有了自動載入器,就無需像前面那樣手動引入檔案,自動載入策略能找到PHP類,介面或者性狀,然後執行時按需將其載入PHP直譯器。
在PHP-FIG釋出PSR-4推薦規範前,PHP元件和框架的作者使用__autoload()和spl_autoload_register()函式註冊自定義的自動載入策略。
PSR-4自動載入器策略
與PHP自動載入器一樣,PSR-4策略用於在執行時查詢並載入PHP類,介面等,PSR-4自動載入策略依賴PHP名稱空間和檔案系統目錄結構查詢並載入PHP指令碼。
PSR-4的精髓是把名稱空間的字首和檔案系統中的目錄對應起來。如: \GuzzleHttp\Client的名稱空間對應於src/Client.php檔案。
如何編寫PSR-4自動載入器(不該這樣做)
符合PSR-4規範的程式碼有個名稱空間對應於檔案系統中的目錄,這個名稱空間字首中的子名稱空間對應於這個目錄裡的子目錄。
下面這段程式碼摘抄自PHP-FIG網站()
/**
* 舉例實現專案專用的自動載入器.
*
* 在SPL中註冊這個自動載入函式後,遇到下面程式碼時
* 這個函式會嘗試從/path/to/project/src/Baz/Qux.php檔案載入
* \Foo\Bar\Baz\Qux class:
*
* new \Foo\Bar\Baz\Qux;
*
* @param string $class 完全限定的類名。
* @return void
*/
spl_autoload_register(function ($class) {
// 專案名稱空間字首
$prefix = 'Foo\\Bar\\';
// 名稱空間字首對應的基目錄
$base_dir = __DIR__ . '/src/';
// 引數傳入的類是否使用名稱空間字首?
$len = strlen($prefix);
if (strncmp($prefix, $class, $len) !== 0) {
// 不使用,交給註冊的下一個自動載入器處理
return;
}
// 獲取去掉字首後的類名
$relative_class = substr($class, $len);
// 把名稱空間字首替換成基目錄
// 去掉字首的類名中,把名稱空間分隔符替換成目錄空間分隔符
// 然後加上 .php
$file = $base_dir . str_replace('\\', '/', $relative_class) . '.php';
// 如果檔案存在,將其匯入
if (file_exists($file)) {
require $file;
}
});
複製上面這段程式碼,修改base_dir和preifx的值,這樣就有一個可以的PSR-4自動載入器類。
不過沒必要自己實現,因為可以使用Composer自動生成的PSR-4自動載入器
相關文章
- Composer 自動載入
- php 自動類載入類 composer.json 實現自動載入PHPJSON
- composer自動載入配置
- 自動載入的iframe高度自適應
- 再看 Composer 自動載入原始碼原始碼
- ThinkPHP6 的自動載入PHP
- Composer 自動載入原始碼解析原始碼
- 初學 PHP 類的自動載入PHP
- 2、Ktor學習-自動重新載入;
- PHP檔案的自動載入(autoloading)PHP
- 徹底搞懂Composer自動載入原理
- sweetalert載入彈窗完成自動關閉
- Laravel 原始碼筆記 Composer 自動載入Laravel原始碼筆記
- PHP 物件導向 (八)類的自動載入PHP物件
- springboot擴充套件配置檔案自動載入Spring Boot套件
- PHP名稱空間與自動載入簡述PHP
- PHP 的自動載入(持續學習更新中)PHP
- SpringBoot原始碼解析-Bean的載入與自動化配置Spring Boot原始碼Bean
- PHP名稱空間與PSR-4自動載入PHP
- tp5.0 的 模組配置自動載入問題
- Composer 實現自動載入原理-新手也能看懂
- 載入驅動
- 自動登入方案
- PHP框架中的檔案載入的實現(自動載入/PSR規範/名稱空間)PHP框架
- 使用jQuery每10秒自動載入和重新整理Div。jQuery
- 簡讀composer自動載入原始碼(個人筆記向)原始碼筆記
- php基礎,php自動載入的實現程式碼示例PHP
- 動態載入UserControl
- spring boot開發熱載入問題 自動編譯不生效Spring Boot編譯
- 輸入自動補齊
- shell自動化輸入
- 滾動載入圖片(懶載入)實現原理
- python自動下載圖片Python
- DLL動態庫動態載入
- TP5.1 原始碼窺探之類的自動載入機制原始碼
- python動態載入(三)Python
- vue 動態載入元件Vue元件
- Java動態載入類Java