路径别名与名字空间
其中的 是某个现存目录的别名。
通过使用 YiiBase::getPathOfAlias(), 别名可以被翻译为其相应的路径。例如, system.web.CController
会被翻译为 yii/framework/web/CController
。
通过调用 ,我们可以定义新的根路径别名。
为方便起见,Yii 预定义了以下几个根别名:
- system: 表示 Yii 框架目录;
- application: 表示应用的 基础目录;
- webroot: 表示 文件所在的目录。此别名从版本 1.0.3 开始有效。
- ext: 表示包含了所有第三方 扩展 的目录。此别名从版本 1.0.8 开始有效。
额外的,如果应用使用了 , (Yii) 也为每个模块ID定义了根别名,指向相应模块的跟目录。此功能从版本 1.0.3 起有效。
使用别名可以很方便的导入类的定义。例如,如果我们想包含 CController 类的定义,我们可以调用如下代码
方法跟 include
和 require
不同,它更加高效。导入(import)的类定义并不会真正被包含进来,直到它第一次被引用。多次导入同样的名字空间也会比 include_once
和 快得多。
从1.1.5版本开始,Yii允许用户定义的类通过使Class Map机制来预先导入,这也是Yii内置类使用的方法。预先引入机制可以在Yii应用的任何地方使用,无需显式地导入或者包含文件。这个特性对于一个建立在Yii基础上的框架或者类库来说很有用。
若要使用预导入功能,要在CWebApplication::run()执行前执行下面的代码:
除 外, 别名还在其他许多地方指向类。例如,路径别名可以传递给 Yii::createComponent() 以创建相应类的实例。即使类文件在之前从未被包含。
不要将路径别名和名字空间混淆了,名字空间是指对一些类名的一个逻辑组合,这样它们就可以相互区分开,即使有相同的名字。而路径别名是用于指向一个类文件或目录。路径别名与名字空间并不冲突。
使用命名空间的类是指一个在非全局命名空间下声明的类。比如说,类application\components\GoogleMap
在命名空间application\components
下的类。使用命名空间需要 PHP 5.3.0 或者以上版本。
从1.1.5开始,可以无需显式引入而使用一个包含命名空间的类。比如说,我们可以创建一个application\components\GoogleMap
的实例而无需去处理引入的路径,这样就增强了Yii的自动导入机制。