W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Yii 依靠類自動加載機制來定位和包含所需的類文件。它提供一個高性能且完美支持PSR-4 標(biāo)準(zhǔn)(中文漢化)的自動加載器。該自動加載器會在引入框架文件?Yii.php
?時安裝好。
注意:為了簡化敘述,本篇文檔中我們只會提及類的自動加載。不過,要記得文中的描述同樣也適用于接口和Trait(特質(zhì))的自動加載哦。
要使用 Yii 的類自動加載器,你需要在創(chuàng)建和命名類的時候遵循兩個簡單的規(guī)則:
foo\bar\MyClass
)。// $className 是一個開頭包含反斜杠的完整類名(譯注:請自行谷歌:fully qualified class name)
$classFile = Yii::getAlias('@' . str_replace('\\', '/', $className) . '.php');
舉例來說,若某個類名為?foo\bar\MyClass
,對應(yīng)類的文件路徑別名會是?@foo/bar/MyClass.php
。為了讓該別名能被正確解析為文件路徑,@foo
?或?@foo/bar
?中的一個必須是根別名。
當(dāng)我們使用基本應(yīng)用模版時,可以把你的類放置在頂級命名空間?app
?下,這樣它們就可以被 Yii 自動加載,而無需定義一個新的別名。這是因為?@app
?本身是一個預(yù)定義別名,且類似于?app\components\MyClass
?這樣的類名,基于我們剛才所提到的算法,可以正確解析出?AppBasePath/components/MyClass.php
?路徑。
在高級應(yīng)用模版里,每一邏輯層級會使用他自己的根別名。比如,前端層會使用?@frontend
?而后端層會使用?@backend
。因此,你可以把前端的類放在?frontend
?命名空間,而后端的類放在?backend
。 這樣這些類就可以被 Yii 自動加載了。
Yii 類自動加載器支持類映射表功能,該功能會建立一個從類的名字到類文件路徑的映射。當(dāng)自動加載器加載一個文件時,他首先檢查映射表里有沒有該類。如果有,對應(yīng)的文件路徑就直接加載了,省掉了進一步的檢查。這讓類的自動加載變得超級快。事實上所有的 Yii 核心類都是這樣加載的。
你可以用?Yii::$classMap
?方法向映射表中添加類,
Yii::$classMap['foo\bar\MyClass'] = 'path/to/MyClass.php';
別名可以被用于指定類文件的路徑。你應(yīng)該在引導(dǎo)啟動的過程中設(shè)置類映射表,這樣映射表就可以在你使用具體類之前就準(zhǔn)備好。
因為 Yii 完全支持 Composer 管理依賴包,所以推薦你也同時安裝 Composer 的自動加載器,如果你用了一些自帶自動加載器的第三方類庫,你應(yīng)該也安裝下它們。
當(dāng)你同時使用其他自動加載器和 Yii 自動加載器時,應(yīng)該在其他自動加載器安裝成功之后,再包含?Yii.php
?文件。這將使 Yii 成為第一個響應(yīng)任何類自動加載請求的自動加載器。舉例來說,以下代碼提取自基本應(yīng)用模版的入口腳本?。第一行安裝了 Composer 的自動加載器,第二行才是 Yii 的自動加載器:
require(__DIR__ . '/../vendor/autoload.php');
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');
你也可以只使用 Composer 的自動加載,而不用 Yii 的自動加載。不過這樣做的話,類的加載效率會下降,且你必須遵循 Composer 所設(shè)定的規(guī)則,從而讓你的類滿足可以被自動加載的要求。
補充:若你不想要使用 Yii 的自動加載器,你必須創(chuàng)建一個你自己版本的?
Yii.php
?文件,并把它包含進你的入口腳本里。
Yii 自動加載器支持自動加載擴展的類。唯一的要求是它需要在?composer.json
?文件里正確地定義?autoload
?部分。請參考Composer 文檔(英文)(中文漢化),來了解如何正確描述?autoload
?的更多細(xì)節(jié)。
在你不使用 Yii 的自動加載器時,Composer 的自動加載器仍然可以幫你自動加載擴展內(nèi)的類。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: