• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

Yii框架官方指南系列12——基础知识:路径别名与名字空间

PHP admin 1年前 (2018-06-08) 12次浏览 未收录 0个评论

Yii 中广泛的使用了路径别名。路径别名关联于一个目录或文件的路径。它以点号语法指定,类似于广泛使用的名字空间(namespace)格式:

RootAlias.path.to.target

其中的 RootAlias 是某个现存目录的别名。

通过使用 YiiBase::getPathOfAlias(), 别名可以被翻译为其相应的路径。 例如, system.web.CController 会被翻译为 yii/framework/web/CController

通过调用 YiiBase::setPathOfAlias(),我们可以定义新的根路径别名。

1. Root Alias

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

    额外的,如果应用使用了 模块, (Yii) 也为每个模块ID定义了根别名,指向相应模块的跟目录。 此功能从版本 1.0.3 起有效。

    通过使用 YiiBase::getPathOfAlias(), 别名可以被翻译为其相应的路径。 例如, system.web.CController 会被翻译为 yii/framework/web/CController

    2. Importing Classes

    使用别名可以很方便的导入类的定义。 例如,如果我们想包含 CController 类的定义,我们可以调用如下代码

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

    import 方法跟 includerequire 不同,它更加高效。 导入(import)的类定义并不会真正被包含进来,直到它第一次被引用。 多次导入同样的名字空间也会比 include_oncerequire_once 快得多。

    使用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. 使用命名空间的类

    使用命名空间的类是指一个在非全局命名空间下声明的类。比如说,类applicationcomponentsGoogleMap 在命名空间applicationcomponents下的类。使用命名空间需要 PHP 5.3.0 或者以上版本。

    从1.1.5开始,可以无需显式引入而使用一个包含命名空间的类。比如说,我们可以创建一个applicationcomponentsGoogleMap 的实例而无需去处理引入的路径,这样就增强了Yii的自动导入机制。

    若要自动导入使用命名空间的类,命名空间的格式必须和路径别名相似。比如说,类applicationcomponentsGoogleMap 所对应的路径必须和别名application.components.GoogleMap一致。

    以上就是Yii框架官方指南系列12——基础知识:路径别名与名字空间的内容,更多相关内容请关注PHP中文网(www.php.cn)!


    39MO , 版权所有丨如未注明 , 均为原创丨转载请注明原文链接:Yii框架官方指南系列12——基础知识:路径别名与名字空间
    喜欢 (0)
    [1353713598@qq.com]
    分享 (0)
    发表我的评论
    取消评论
    表情 贴图 加粗 删除线 居中 斜体 签到

    Hi,您需要填写昵称和邮箱!

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址