《PHP編程:thinkPHP5.0框架自動加載機制分析》要點:
本文介紹了PHP編程:thinkPHP5.0框架自動加載機制分析,希望對您有用。如果有疑問,可以聯系我們。
相關主題:thinkphp教程
本文實例講述了thinkPHP5.0框架自動加載機制.分享給大家供大家參考,具體如下:PHP編程
概述PHP編程
ThinkPHP5.0 真正實現了按需加載,所有類庫采用自動加載機制,并且支持類庫映射和composer類庫的自動加載.PHP編程
自動加載的實現由think\Loader類庫完成,自動加載規范符合PHP的PSR-4.PHP編程
自動加載PHP編程
由于新版ThinkPHP完全采用了命名空間的特性,因此只需要給類庫正確定義所在的命名空間,而命名空間的路徑與類庫文件的目錄一致,那么就可以實現類的自動加載.PHP編程
類庫的自動加載檢測順序如下:PHP編程
1、類庫映射檢測;
2、PSR-4自動加載檢測;
3、PSR-0自動加載檢測;PHP編程
系統會按順序檢測,一旦檢測生效的話,就會自動載入對應的類庫文件.PHP編程
類庫映射PHP編程
遵循我們上面的命名空間定義規范的話,基本上可以完成類庫的自動加載了,但是如果定義了較多的命名空間的話,效率會有所下降,所以,我們可以給常用的類庫定義類庫映射.命名類庫映射相當于給類文件定義了一個別名,效率會比命名空間定位更高效,例如:PHP編程
Loader::addClassMap('think\Log',LIB_PATH.'think\Log.php'); Loader::addClassMap('org\util\Array',LIB_PATH.'org\util\Array.php');
也可以利用addClassMap方法批量導入類庫映射定義,例如:PHP編程
$map = [ 'think\Log' => LIB_PATH.'think\Log.php', 'org\util\array'=> LIB_PATH.'org\util\Array.php' ]; Loader::addClassMap($map);
雖然通過類庫映射的方式注冊的類可以不強制要求對應命名空間目錄,但是仍然建議遵循PSR-4規范定義類庫和目錄.PHP編程
類庫導入PHP編程
如果你不需要系統的自動加載功能,又或者沒有使用命名空間的話,那么也可以使用think\Loader類的import方法手動加載類庫文件,例如:PHP編程
Loader::import('org.util.array'); Loader::import('@.util.upload');
示例PHP編程
// 引入 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');
類庫導入也采用類似命名空間的概念(但不需要實際的命名空間支持),支持的“根命名空間”包括:PHP編程
如果完全遵從系統的命名空間定義的話,一般來說無需手動加載類庫文件,直接實例化即可.PHP編程
Composer自動加載PHP編程
5.0版本支持Composer安裝的類庫的自動加載,你可以直接按照Composer依賴庫中的命名空間直接調用.PHP編程
更多關于thinkPHP相關內容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結》、《ThinkPHP常用方法總結》、《codeigniter入門教程》、《CI(CodeIgniter)框架進階教程》、《Zend FrameWork框架入門教程》、《smarty模板入門基礎教程》及《PHP模板技術總結》.PHP編程
希望本文所述對大家基于ThinkPHP框架的PHP程序設計有所幫助.PHP編程
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/1360.html