lostAngel 2011-05-16 16:50:13 5996次浏览 4条回复 1 0 0

Yii 广泛的使用了路径别名.路径别名是和目录或者文件相关联的.它是通过使用点号(".")语法指定的,类似于以下这种被广泛使用的命名空间的格式:

1 RootAlias.path.to.target

RootAlias 则是一些已经存在目录的别名.通过调用 YiiBase::setPathOfAlias() 我们可以定义新的路径别名.

为了方便起见,Yii 预定义了以下根目录别名:

* system: 指向 Yii 框架目录;
* zii: 指向 zii library 目录;
* application: 指向应用程序 基本目录(base directory);
* webroot: 指向包含里 入口脚本 文件的目录. 此别名自 1.0.3 版起生效.
* ext: 指向包含所有第三方扩展的目录, 从版本 1.0.8 可用;

另外,若应用使用了 module,一个根别名也被定义为每个 module ID 并指向相应 module 的 base path. 此特征从版本 1.0.3 可用.

通过使用 YiiBase::getPathOfAlias(), 一个别名可以被转换成它的对应的路径. 例如, system.web.CController 可以被转换成yii/framework/web/CController.

使用别名,来导入已定义的类是非常方便的.例如,如果我们想要包含 CController 类的定义, 我们可以通过以下方式调用:

1 Yii::import('system.web.CController');

import 方法不同于 include 和 require,它是更加高效的.实际上被导入(import) 的类定义直到它第一次被调用之前都是不会被包含的. 同样的,多次导入同一个命名空间要比 include_once 和 require_once 快很多.

提示: 当调用一个通过 Yii 框架定义的类时, 我们不必导入或者加载它.所有的 Yii 核心类都是被预加载的.

我们也可以按照以下的语法导入整个目录,以便目录下所有的类文件都可以在需要时被包含.

1 Yii::import('system.web.*');

除了 import 外, 别名同样被用在其他很多地方来调用类.例如, 别名可以被传递到 Yii::createComponent() 以创建对应类的一个实例, 即使这个类文件没有被预先包含.

不要把别名和命名空间混淆了.命名空间调用了一些类名的逻辑分组以便他们可以同其他类名区分开,即使他们的名称是一样的,而别名则是用来引用类文件或者目录的.所以路径别名和命名空间并不冲突.

提示: 因为PHP 5.3.0以前的版本并不内置支持名命名空间,所以你并不能创建两个有着同样名称但是不同定义的类的实例.为此,所有 Yii 框架类都以字母 'C'(代表 'class') 为前缀,以便避免与用户自定义类产生冲突.在这里我们推荐为 Yii 框架保留'C'字母前缀的唯一使用权,用户自定义类则可以使用其他字母作为前缀.
您需要登录后才可以回复。登录 | 立即注册