Yii 中廣泛的使用了路徑別名。路徑別名關聯於一個目錄或檔案的路徑。它以點號語法指定,類似於廣泛使用的名字空間(namespace)格式:
RootAlias.path.to.target
其中的 RootAlias
是某個現存目錄的別名。
透過使用 YiiBase::getPathOfAlias(), 別名可以翻譯為其對應的路徑。 例如, system.web.CController
會翻譯為 yii/framework/web/CController
。
透過呼叫 YiiBase::setPathOfAlias(),我們可以定義新的根路徑別名。
為方便起見,Yii 預先定義了以下幾個根別名:
system
: 表示Yii 框架目錄;
: 表示應用的 基礎目錄;
: 表示 入口腳本 檔案所在的目錄。此別名從版本 1.0.3 開始有效。
: 表示包含了所有第三方 擴充 的目錄。此別名從版本 1.0.8 開始有效。
透過使用 YiiBase::getPathOfAlias(), 別名可以被翻譯為其對應的路徑。 例如, system.web.CController
會翻譯為
2. Importing Classes
使用別名可以很方便的導入類別的定義。 例如,如果我們想要包含 CController 類別的定義,我們可以呼叫以下程式碼
Yii::import('system.web.CController');
include
。 多次導入相同的名字空間也會比
include_once和
require_once 快得多。 提示: 當引用 Yii 框架定義的類別時,我們不需要匯入或包含它。 所有的核心 Yii 類別都已提前導入了
。
從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. 使用命名空間的類別
在命名空間
applicationcomponents下的類別。使用命名空間需要 PHP 5.3.0 或以上版本。從1.1.5開始,可以無需明確引入而使用一個包含命名空間的類別。比方說,我們可以建立一個applicationcomponentsGoogleMap
的實例而無需去處理引入的路徑,這樣就增強了Yii的自動導入機制。
若要自動匯入使用命名空間的類,命名空間的格式必須和路徑別名相似。比方說,類別applicationcomponentsGoogleMap
所對應的路徑必須和別名application.components.GoogleMap
一致。
以上就是Yii框架官方指南系列12——基礎知識:路徑別名與名字空間的內容,更多相關內容請關注PHP中文網(www.php.cn)!