這篇文章主要介紹了thinkPHP5.0框架自動載入機制,較為詳細的分析了thinkPHP5.0自動載入的概念、原理、用法與相關注意事項,需要的朋友可以參考下
本文實例講述了thinkPHP5.0框架自動載入機制。分享給大家供大家參考,具體如下:
概述
ThinkPHP5.0 真正實現了按需加載,所有類別庫採用自動載入機制,並且支援類別庫映射和composer類別庫的自動載入。
自動載入的實作由think\Loader類別庫完成,自動載入規格符合PHP的PSR-4。
自動載入
由於新版ThinkPHP完全採用了命名空間的特性,因此只需要給類別庫正確定義所在的命名空間,而命名空間的路徑與類別庫檔案的目錄一致,那麼就可以實作類別的自動載入。
類別庫的自動載入偵測順序如下:
1、類別庫對映偵測;
2、PSR-4自動載入偵測;
3、PSR-0自動載入檢測;
系統會依序偵測,一旦偵測生效的話,就會自動載入對應的類別庫檔案。
類別庫映射
遵循我們上面的命名空間定義規範的話,基本上可以完成類別庫的自動載入了,但是如果定義了較多的命名空間的話,效率會有所下降,所以,我們可以為常用的類別庫定義類別庫映射。命名類別庫對應相當於為類別檔案定義了一個別名,效率會比命名空間定位更有效率,例如:
Loader::addClassMap('think\Log',LIB_PATH.'think\Log.php'); Loader::addClassMap('org\util\Array',LIB_PATH.'org\util\Array.php');
也可以利用addClassMap方法批次匯入類別庫映射定義,例如:
$map = [ 'think\Log' => LIB_PATH.'think\Log.php', 'org\util\array'=> LIB_PATH.'org\util\Array.php' ]; Loader::addClassMap($map);
雖然透過類別庫映射的方式註冊的類別可以不強制要求對應命名空間目錄,但是仍然建議遵循PSR-4規範定義類別庫和目錄。
類別庫導入
如果你不需要係統的自動載入功能,又或者沒有使用命名空間的話,那麼也可以使用think\Loader類別的import方法手動載入類別庫文件,例如:
Loader::import('org.util.array'); Loader::import('@.util.upload');
範例
// 引入 extends/qrcode.php Loader::import('qrcode', EXTEND_PATH); // 助手函数 import('qrcode', EXTEND_PATH); // 引入 extends/wechat-sdk/wechat.class.php Loader::import('wechat-sdk.wechat', EXTEND_PATH, '.class.php'); // 助手函数 import('wechat-sdk.wechat', EXTEND_PATH, '.class.php');
類別庫導入也採用類似命名空間的概念(但不需要實際的命名空間支援),支援的「根命名空間」包括:
目錄 | 說明 |
---|---|
#behavior | 系統行為類別庫 |
think | #核心基底類別庫 |
traits | 系統Traits類別庫 |
app | 應用程式類別庫 |
@ | 表示當前模組類別庫包 |
如果完全遵從系統的命名空間定義的話,一般來說無需手動載入類別庫文件,直接實例化即可。
Composer自動載入
5.0版本支援Composer安裝的類別庫的自動加載,你可以直接按照Composer依賴庫中的命名空間直接呼叫。
以上是具體分析thinkPHP5.0框架自動載入機制的詳細內容。更多資訊請關注PHP中文網其他相關文章!