具體分析thinkPHP5.0架構自動載入機制

來源:互聯網
上載者:User
這篇文章主要介紹了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.phpLoader::import('qrcode', EXTEND_PATH);// 助手函數import('qrcode', EXTEND_PATH);// 引入 extends/wechat-sdk/wechat.class.phpLoader::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依賴庫中的命名空間直接調用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.