自動加載
ThinkPHP5.0
真正實現了按需加載,全部類庫採用自動加載機制,而且支持類庫映射和composer
類庫的自動加載。php
自動加載的實現由think\Loader
類庫完成,自動加載規範符合PHP的PSR-4
。css
自動加載
因爲新版ThinkPHP
徹底採用了命名空間的特性,所以只須要給類庫正肯定義所在的命名空間,而命名空間的路徑與類庫文件的目錄一致,那麼就能夠實現類的自動加載。java
類庫的自動加載檢測順序以下:restful
一、類庫映射檢測;
二、PSR-4
自動加載檢測;
三、PSR-0
自動加載檢測;app
系統會按順序檢測,一旦檢測生效的話,就會自動載入對應的類庫文件。composer
類庫映射
遵循咱們上面的命名空間定義規範的話,基本上能夠完成類庫的自動加載了,可是若是定義了較多的命名空間的話,效率會有所降低,因此,咱們能夠給經常使用的類庫定義類庫映射。命名類庫映射至關於給類文件定義了一個別名,效率會比命名空間定位更高效,例如:函數
Loader::addClassMap('think\Log',LIB_PATH.'think\Log.php'); Loader::addClassMap('org\util\Array',LIB_PATH.'org\util\Array.php');
也能夠利用addClassMap
方法批量導入類庫映射定義,例如:post
$map = [ 'think\Log' => LIB_PATH.'think\Log.php', 'org\util\array'=> LIB_PATH.'org\util\Array.php' ]; Loader::addClassMap($map);
雖然經過類庫映射的方式註冊的類能夠不強制要求對應命名空間目錄,可是仍然建議遵循PSR-4規範定義類庫和目錄。spa
類庫導入
若是你不須要系統的自動加載功能,又或者沒有使用命名空間的話,那麼也可使用think\Loader
類的import
方法手動加載類庫文件,例如:
Loader::import('org.util.array'); //import 進入 輸入 導入 匯入 Loader::import('@.util.upload');
示例
// 引入 extend/qrcode.php Loader::import('qrcode', EXTEND_PATH); // 助手函數 import('qrcode', EXTEND_PATH); // 引入 extend/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 | 應用類庫 |
@ | 表示當前模塊類庫包 |
traits 特質 特徵 性態 特性
若是徹底聽從系統的命名空間定義的話,通常來講無需手動加載類庫文件,直接實例化便可。
ThinkPHP5.0
不推薦使用import
方法。
Composer自動加載
5.0版本支持Composer
安裝的類庫的自動加載,你能夠直接按照Composer
依賴庫中的命名空間直接調用。