thinkPHP5.0框架自動(dòng)加載機(jī)制分析
本文實(shí)例講述了thinkPHP5.0框架自動(dòng)加載機(jī)制。分享給大家供大家參考,具體如下:
概述
ThinkPHP5.0 真正實(shí)現(xiàn)了按需加載,所有類庫(kù)采用自動(dòng)加載機(jī)制,并且支持類庫(kù)映射和composer類庫(kù)的自動(dòng)加載。
自動(dòng)加載的實(shí)現(xiàn)由think\Loader類庫(kù)完成,自動(dòng)加載規(guī)范符合PHP的PSR-4。
自動(dòng)加載
由于新版ThinkPHP完全采用了命名空間的特性,因此只需要給類庫(kù)正確定義所在的命名空間,而命名空間的路徑與類庫(kù)文件的目錄一致,那么就可以實(shí)現(xiàn)類的自動(dòng)加載。
類庫(kù)的自動(dòng)加載檢測(cè)順序如下:
1、類庫(kù)映射檢測(cè);
2、PSR-4自動(dòng)加載檢測(cè);
3、PSR-0自動(dòng)加載檢測(cè);
系統(tǒng)會(huì)按順序檢測(cè),一旦檢測(cè)生效的話,就會(huì)自動(dòng)載入對(duì)應(yīng)的類庫(kù)文件。
類庫(kù)映射
遵循我們上面的命名空間定義規(guī)范的話,基本上可以完成類庫(kù)的自動(dòng)加載了,但是如果定義了較多的命名空間的話,效率會(huì)有所下降,所以,我們可以給常用的類庫(kù)定義類庫(kù)映射。命名類庫(kù)映射相當(dāng)于給類文件定義了一個(gè)別名,效率會(huì)比命名空間定位更高效,例如:
Loader::addClassMap('think\Log',LIB_PATH.'think\Log.php'); Loader::addClassMap('org\util\Array',LIB_PATH.'org\util\Array.php');
也可以利用addClassMap方法批量導(dǎo)入類庫(kù)映射定義,例如:
$map = [ 'think\Log' => LIB_PATH.'think\Log.php', 'org\util\array'=> LIB_PATH.'org\util\Array.php' ]; Loader::addClassMap($map);
雖然通過類庫(kù)映射的方式注冊(cè)的類可以不強(qiáng)制要求對(duì)應(yīng)命名空間目錄,但是仍然建議遵循PSR-4規(guī)范定義類庫(kù)和目錄。
類庫(kù)導(dǎo)入
如果你不需要系統(tǒng)的自動(dòng)加載功能,又或者沒有使用命名空間的話,那么也可以使用think\Loader類的import方法手動(dòng)加載類庫(kù)文件,例如:
Loader::import('org.util.array'); Loader::import('@.util.upload');
示例
// 引入 extends/qrcode.php Loader::import('qrcode', EXTEND_PATH); // 助手函數(shù) import('qrcode', EXTEND_PATH); // 引入 extends/wechat-sdk/wechat.class.php Loader::import('wechat-sdk.wechat', EXTEND_PATH, '.class.php'); // 助手函數(shù) import('wechat-sdk.wechat', EXTEND_PATH, '.class.php');
類庫(kù)導(dǎo)入也采用類似命名空間的概念(但不需要實(shí)際的命名空間支持),支持的“根命名空間”包括:
目錄 | 說明 |
---|---|
behavior | 系統(tǒng)行為類庫(kù) |
think | 核心基類庫(kù) |
traits | 系統(tǒng)Traits類庫(kù) |
app | 應(yīng)用類庫(kù) |
@ | 表示當(dāng)前模塊類庫(kù)包 |
如果完全遵從系統(tǒng)的命名空間定義的話,一般來說無(wú)需手動(dòng)加載類庫(kù)文件,直接實(shí)例化即可。
Composer自動(dòng)加載
5.0版本支持Composer安裝的類庫(kù)的自動(dòng)加載,你可以直接按照Composer依賴庫(kù)中的命名空間直接調(diào)用。
更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門教程》、《CI(CodeIgniter)框架進(jìn)階教程》、《Zend FrameWork框架入門教程》、《smarty模板入門基礎(chǔ)教程》及《PHP模板技術(shù)總結(jié)》。
希望本文所述對(duì)大家基于ThinkPHP框架的PHP程序設(shè)計(jì)有所幫助。
- Thinkphp5.0自動(dòng)生成模塊及目錄的方法詳解
- ThinkPHP中的三大自動(dòng)簡(jiǎn)介
- ThinkPHP3.1新特性之動(dòng)態(tài)設(shè)置自動(dòng)完成和自動(dòng)驗(yàn)證示例
- thinkphp在模型中自動(dòng)完成session賦值示例代碼
- thinkPHP自動(dòng)驗(yàn)證、自動(dòng)添加及表單錯(cuò)誤問題分析
- ThinkPHP中create()方法自動(dòng)驗(yàn)證表單信息
- thinkPHP框架自動(dòng)填充原理與用法分析
- thinkPHP線上自動(dòng)加載異常與修復(fù)方法實(shí)例分析
- ThinkPHP5.0框架使用build 自動(dòng)生成模塊操作示例
相關(guān)文章
Zend Framework+smarty用法實(shí)例詳解
這篇文章主要介紹了Zend Framework+smarty用法,結(jié)合實(shí)例形式詳細(xì)分析了Zend Framework框架整合Smarty模板的具體步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-03-03Yii2針對(duì)指定url的生成及圖片等的引入方法小結(jié)
這篇文章主要介紹了Yii2針對(duì)指定url的生成及圖片等的引入方法,針對(duì)常用的URL格式及圖片路徑操作結(jié)合實(shí)例進(jìn)行了對(duì)比分析,需要的朋友可以參考下2016-07-07thinkphp文件引用與分支結(jié)構(gòu)用法實(shí)例
這篇文章主要介紹了thinkphp文件引用與分支結(jié)構(gòu)用法,以實(shí)例形式演示了css與js文件導(dǎo)入的方法,以及if與switch語(yǔ)句的用法,需要的朋友可以參考下2014-11-11微信公眾號(hào)支付之坑:調(diào)用支付jsapi缺少參數(shù) timeStamp等錯(cuò)誤解決方法
這段時(shí)間一直比較忙,一忙起來真感覺自己就只是一臺(tái)掙錢的機(jī)器了(說的好像能掙到多少錢似的,呵呵);這會(huì)難得有點(diǎn)兒空閑時(shí)間,想把前段時(shí)間開發(fā)微信公眾號(hào)支付遇到問題及解決方法跟大家分享下,這些“暗坑”能不掉就不掉吧,要不然關(guān)鍵時(shí)刻出問題,真是讓人急的焦頭爛額2016-01-01PHP開發(fā)中csrf攻擊的簡(jiǎn)單演示和防范
CSRF的全名為Cross-site request forgery,它的中文名為 跨站請(qǐng)求偽造(偽造跨站請(qǐng)求【這樣讀順口一點(diǎn)】)CSRF是一種夾持用戶在已經(jīng)登陸的web應(yīng)用程序上執(zhí)行非本意的操作的攻擊方式。相比于XSS,CSRF是利用了系統(tǒng)對(duì)頁(yè)面瀏覽器的信任,XSS則利用了系統(tǒng)對(duì)用戶的信任。2017-05-05Laravel+Layer實(shí)現(xiàn)圖片上傳功能(整理篇)
這篇文章主要介紹了Laravel+Layer實(shí)現(xiàn)圖片上傳功能(整理篇),需要的朋友可以參考下2018-01-01TP5(thinkPHP5)框架基于ajax與后臺(tái)數(shù)據(jù)交互操作簡(jiǎn)單示例
這篇文章主要介紹了TP5(thinkPHP5)框架基于ajax與后臺(tái)數(shù)據(jù)交互操作,結(jié)合實(shí)例形式分析了thinkPHP5前端基于jQuery的ajax數(shù)據(jù)提交及后臺(tái)數(shù)據(jù)接收、處理相關(guān)操作技巧,需要的朋友可以參考下2018-09-09