Yii 中廣泛的使用了路徑別名。路徑別名關聯于一個目錄或文件的路徑。它以點號語法指定,類似于廣泛使用的名字空間(namespace)格式:
RootAlias.path.to.target
其中的?RootAlias
?是某個現存目錄的別名。
通過使用?YiiBase::getPathOfAlias(), 別名可以被翻譯為其相應的路徑。 例如,?system.web.CController
?會被翻譯為?yii/framework/web/CController
。
通過調用?YiiBase::setPathOfAlias(),我們可以定義新的根路徑別名。
1. Root Alias
為方便起見,Yii 預定義了以下幾個根別名:
system
: 表示 Yii 框架目錄;zii
: 表示?Zii 庫?目錄;application
: 表示應用的?基礎目錄;webroot
: 表示?入口腳本?文件所在的目錄。此別名從版本 1.0.3 開始有效。ext
: 表示包含了所有第三方?擴展?的目錄。此別名從版本 1.0.8 開始有效。
額外的,如果應用使用了?模塊, (Yii) 也為每個模塊ID定義了根別名,指向相應模塊的跟目錄。 此功能從版本 1.0.3 起有效。
通過使用?YiiBase::getPathOfAlias(), 別名可以被翻譯為其相應的路徑。 例如,?system.web.CController
?會被翻譯為?yii/framework/web/CController
。
2. Importing Classes
使用別名可以很方便的導入類的定義。 例如,如果我們想包含?CController?類的定義,我們可以調用如下代碼
Yii::import('system.web.CController');
import?方法跟?include
?和?require
?不同,它更加高效。 導入(import)的類定義并不會真正被包含進來,直到它第一次被引用。 多次導入同樣的名字空間也會比?include_once
?和?require_once
?快得多。
提示:?當引用 Yii 框架定義的類時,我們不需要導入或包含它。所有的核心 Yii 類都已被提前導入了。
使用Class Map
從1.1.5版本開始,Yii允許用戶定義的類通過使Class Map機制來預先導入,這也是Yii內置類使用的方法。 預先引入機制可以在Yii應用的任何地方使用,無需顯式地導入或者包含文件。這個特性對于一個建立在Yii基礎上的框架或者類庫來說很有用。
若要使用預導入功能,要在CWebApplication::run()執行前執行下面的代碼:
Yii::$classMap=array( 'ClassName1' => 'path/to/ClassName1.php', 'ClassName2' => 'path/to/ClassName2.php', ...... );
3. 導入目錄
我們還可以使用如下語法導入整個目錄,這樣此目錄下的類文件就會在需要時被自動包含。
Yii::import('system.web.*');
除?import?外, 別名還在其他許多地方指向類。 例如,路徑別名可以傳遞給?Yii::createComponent()?以創建相應類的實例。 即使類文件在之前從未被包含。
4. Namespace
不要將路徑別名和名字空間混淆了,名字空間是指對一些類名的一個邏輯組合,這樣它們就可以相互區分開,即使有相同的名字。 而路徑別名是用于指向一個類文件或目錄。路徑別名與名字空間并不沖突。
提示:?由于 5.3.0 版本之前的 PHP 本質上不支持名字空間,你無法創建兩個具有相同名字但不同定義的類的實例。 鑒于此,所有的 Yii 框架類都以字母 'C'(意為 'Class') 作前綴,這樣它們可以區分于用戶定義的類。我們建議前綴 'C' 只保留給 Yii 框架使用,用戶定義的類則使用其他的字母作前綴。
5. 使用命名空間的類
使用命名空間的類是指一個在非全局命名空間下聲明的類。比如說,類application\components\GoogleMap
?在命名空間application\components
下的類。使用命名空間需要 PHP 5.3.0 或者以上版本。
從1.1.5開始,可以無需顯式引入而使用一個包含命名空間的類。比如說,我們可以創建一個application\components\GoogleMap
?的實例而無需去處理引入的路徑,這樣就增強了Yii的自動導入機制。
若要自動導入使用命名空間的類,命名空間的格式必須和路徑別名相似。比如說,類application\components\GoogleMap
?所對應的路徑必須和別名application.components.GoogleMap
一致。
掃碼二維碼 獲取免費視頻學習資料
- 本文固定鏈接: http://phpxs.com/post/1291/
- 轉載請注明:轉載必須在正文中標注并保留原文鏈接
- 掃碼: 掃上方二維碼獲取免費視頻資料