自動加載

概述

ThinkPHP5.0真正實(shí)現(xiàn)了按需加載,所有類庫采用自動加載機(jī)制,并且支持類庫映射和composer類庫的自動加載。

自動加載的實(shí)現(xiàn)由think\Loader類庫完成,自動加載規(guī)范符合PHP的PSR-4。

自動加載

由于新版ThinkPHP完全采用了命名空間的特性,因此只需要給類庫正確定義所在的命名空間,而命名空間的路徑與類庫文件的目錄一致,那么就可以實(shí)現(xiàn)類的自動加載。

類庫的自動加載檢測順序如下:

1、類庫映射檢測;
2、PSR-4自動加載檢測;
3、PSR-0自動加載檢測;

系統(tǒng)會按順序檢測,一旦檢測生效的話,就會自動載入對應(yīng)的類庫文件。

類庫映射

遵循我們上面的命名空間定義規(guī)范的話,基本上可以完成類庫的自動加載了,但是如果定義了較多的命名空間的話,效率會有所下降,所以,我們可以給常用的類庫定義類庫映射。命名類庫映射相當(dāng)于給類文件定義了一個別名,效率會比命名空間定位更高效,例如:

Loader::addClassMap('think\Log',LIB_PATH.'think\Log.php');
Loader::addClassMap('org\util\Array',LIB_PATH.'org\util\Array.php');

也可以利用addClassMap方法批量導(dǎo)入類庫映射定義,例如:

$map = [
    'think\Log'     =>  LIB_PATH.'think\Log.php',
    'org\util\array'=>  LIB_PATH.'org\util\Array.php'
];
Loader::addClassMap($map);

雖然通過類庫映射的方式注冊的類可以不強(qiáng)制要求對應(yīng)命名空間目錄,但是仍然建議遵循PSR-4規(guī)范定義類庫和目錄。

類庫導(dǎo)入

如果你不需要系統(tǒng)的自動加載功能,又或者沒有使用命名空間的話,那么也可以使用think\Loader類的import方法手動加載類庫文件,例如:

Loader::import('org.util.array');
Loader::import('@.util.upload');

示例

// 引入 extend/qrcode.php
Loader::import('qrcode', EXTEND_PATH);
// 助手函數(shù)
import('qrcode', EXTEND_PATH);

// 引入 extend/wechat-sdk/wechat.class.php
Loader::import('wechat-sdk.wechat', EXTEND_PATH, '.class.php');
// 助手函數(shù)
import('wechat-sdk.wechat', EXTEND_PATH, '.class.php');

類庫導(dǎo)入也采用類似命名空間的概念(但不需要實(shí)際的命名空間支持),支持的“根命名空間”包括:

目錄 說明
behavior 系統(tǒng)行為類庫
think 核心基類庫
traits 系統(tǒng)Traits類庫
app 應(yīng)用類庫
@ 表示當(dāng)前模塊類庫包

如果完全遵從系統(tǒng)的命名空間定義的話,一般來說無需手動加載類庫文件,直接實(shí)例化即可。

ThinkPHP5.0不推薦使用import方法。

Composer自動加載

5.0版本支持Composer安裝的類庫的自動加載,你可以直接按照Composer依賴庫中的命名空間直接調(diào)用。

文檔最后更新時間:2018-04-25 17:49:15

文檔
目錄

深色
模式

切換
寬度