理解 Yii::import 方法

Posted

技术标签:

【中文标题】理解 Yii::import 方法【英文标题】:Understanding Yii::import method 【发布时间】:2014-06-01 04:50:46 【问题描述】:

正如 Yii 文档中所说的

导入类或目录。

导入一个类就像包含相应的类文件。这 主要区别在于导入一个类要轻得多,因为它 仅在第一次引用该类时才包含该类文件 时间。

导入目录相当于在php中添加目录 包括路径。如果导入多个目录,则目录 稍后导入的将优先于类文件搜索(即, 它们被添加到 PHP 包含路径的前面)。

考虑以下代码sn-p:

Yii::import('application.components.document');
echo "This is included file:";
foreach(get_included_files() as $value)
    echo "<div>".$value."</div>";

这是一个输出:

Z:\home\localhost\www\index.php
Z:\home\localhost\www\yii\framework\yii.php
Z:\home\localhost\www\yii\framework\YiiBase.php
Z:\home\localhost\www\yii\framework\base\interfaces.php
Z:\home\localhost\www\yii\framework\web\CWebApplication.php
Z:\home\localhost\www\yii\framework\base\CApplication.php
Z:\home\localhost\www\yii\framework\base\CModule.php
Z:\home\localhost\www\yii\framework\base\CComponent.php
Z:\home\localhost\www\web-config.php
Z:\home\localhost\www\yii\framework\logging\CLogger.php
Z:\home\localhost\www\yii\framework\web\CHttpRequest.php
Z:\home\localhost\www\yii\framework\base\CApplicationComponent.php
Z:\home\localhost\www\yii\framework\collections\CMap.php
Z:\home\localhost\www\yii\framework\web\CUrlManager.php
Z:\home\localhost\www\protected\controllers\tranController.php
Z:\home\localhost\www\yii\framework\web\CController.php
Z:\home\localhost\www\yii\framework\web\CBaseController.php
Z:\home\localhost\www\protected\controllers\tranAction.php
Z:\home\localhost\www\yii\framework\web\actions\CAction.php

但是这个类是在我使用它之后导入的,比如Yii::app()-&gt;document;

【问题讨论】:

【参考方案1】:

函数 Yii::import 不包含文件,而是简单地添加路径到 $_import 数组,看this。

【讨论】:

感谢您的回答。但我想澄清一件事:如果我们将组件应用为Yii::app()-&gt;document;,那么会调用__get 魔术方法。此方法调用getComponent 方法,该方法使用_componentConfig 数组,但不使用_import。那么为什么没有Yii::import('application.components.document'); 就不能使用Yii-&gt;app()-&gt;document 组件呢? 我认为可以,因为我们在配置文件中指定了类组件:document=>array('class'=>'application.components.document')

以上是关于理解 Yii::import 方法的主要内容,如果未能解决你的问题,请参考以下文章

Buffer简单理解及常用方法介绍

扩展方法的快速理解

理解Activity中的方法回调

快速理解static 静态

快速理解static 静态

对Java方法方法重载的理解