自動載入
在編寫面相物件程式設計(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自動載入配置
- (十三)自動載入新模組
- PHP自動載入機制PHP
- 自動載入的iframe高度自適應
- ThinkPHP6 的自動載入PHP
- SpringBoot--自動載入Spring Boot
- PHP 類自動載入機制PHP
- AIX啟動自動載入檔案系統AI
- 再看 Composer 自動載入原始碼原始碼
- Composer 自動載入原始碼解析原始碼
- 初學 PHP 類的自動載入PHP
- PHP 自動載入功能原理解析PHP
- composer應用(一)自動載入
- 2、Ktor學習-自動重新載入;
- sweetalert載入彈窗完成自動關閉
- 徹底搞懂Composer自動載入原理
- ZendFramework自動載入類的實現方法Framework
- 封裝ListView,實現自動載入更多封裝View
- PLSQL8.0自動載入器原始碼SQL原始碼
- 拖動滾動條實現內容自動載入效果
- 讓AutoCAD啟動時自動載入應用程式
- Laravel 原始碼筆記 Composer 自動載入Laravel原始碼筆記
- PHP 物件導向 (八)類的自動載入PHP物件
- PHP檔案的自動載入(autoloading)PHP
- DFL自動虛擬載入的使用說明
- ASM無法自動載入磁碟組問題ASM
- WINDOWS能夠自動載入程式的位置(轉)Windows
- tp5.0 的 模組配置自動載入問題
- PHP 的自動載入(持續學習更新中)PHP
- PHP名稱空間與自動載入簡述PHP
- PHP AutoLoad 自動載入機制分析實踐PHP
- PHP名稱空間及自動載入淺析PHP
- PHP自動載入__autoload的工作機制PHP
- express框架路由配置及controller自動載入Express框架路由Controller
- ListView下拉重新整理,上拉自動載入更多View
- 自動掛載 fstab