YiiBase类为YII框架的运行提供了公共的基础功能:别名管理与对象创建管理。
在创建一个php的对象时,需要先include这个类的定义文件,然后再new这个对象。在不同环境下(开发环境/测试环境/线上环境),apache的webroot路径的配置可能不一样,所以这个类的定义文件的全路径就会不同,Yii框架通过YiiBase的别名管理来解决了这个问题。
在创建对象时,需要导入对应类的定义,经常需要使用这5个函数:include()、include_once()、require()、require_once()、set_include_path()。Yii通过使用YiiBase::import()来统一解决这个问题。下图描述了YiiBase提供“别名管理与对象创建管理”的工作原理:
首先看别名管理,它是通过为某个文件夹(一个文件夹往往对应一个模块)起一个别名,在YII框架中可以使用这个别名来替代这个文件夹的全路径,比如:system别名代表的是框架/home/work/yii/framework的路径,所以可以使用system.base.CApplication代表/home/work/yii/framework/base/CApplication.php文件的路径。当然在应用层(我们)的代码中也可以通过Yii::setPathOfAlias来注册别名。
一般情况下我们使用绝对路径或者相对路径来进行文件引用,当然这2中情况都有弊端。绝对路径:当我们的代码部署到测试环境或者线上环境的时候需要大量修改被include文件的路径;相对路径:当某些模块的文件夹的位置发生调整(改名)的时候,所有的相对路径都需要修改。而使用别名的方式只需要改一处:注册别名的时候,即Yii::setPathOfAlias()。从而将文件夹的变动而导致的代码改动集中到一处完成。
再看import功能:a、导入一个类的定义,从而可以创建该类的对象;b、将某个文件夹加入到include_path,从而可以直接include这个文件下的所有文件。Yii::import相当于如下5个函数的统一:include()、include_once()、require()、require_once()、set_include_path()。而且一般情况下速度会比这些函数更快。当然Yii::import支持别名的功能,从而可以解决路径变动带来的麻烦。
最后看一下对象的创建,在YII框架中有2中方法创建对象:1、使用new关键字;2、使用Yii::createComponent方法。
当使用new关键字创建对象时,autoload会分3步来寻找对应类的定义:a、判断是否为framework中的类(framework的所有类和这个类的全路径都保存在YiiBase的一个成员变量中);2、判断是否使用Yii::import导入了这个类,对于非框架的类,我们在创建这个类的对象时需要先import这个类的定义;3、从include_path目录下查找以这个类名字命名的php脚本,所以在开发的时候类名尽量与文件名保存一致,这样我们导入包含这个文件的文件夹就行了,从而无需把这个文件夹中的每个文件都导入一次。
当使用Yii::createComponent方法创建对象时,它提供了比new关键字更多的功能:a、通过这个类的全路径别名来指定类的位置和类名(类名必须与文件名一致),当这个类还没有导入的时候,会根据全路径来自动导入这个类的定义;2、对创建出来的对象的成员变量进行赋值。即如下图描述,原来要写3行以上的代码,现在一行代码就可以搞定(write less, do more)。
- 浏览: 1868191 次
- 性别:
- 来自: 北京
最新评论
-
wangyudong:
Wisdom RESTClient工具地址更新了哦https: ...
前端模拟POST发送数据-Chrome下的REST Client(接口测试利器) -
wangyudong:
很多REST Client是不支持自动化测试RESTful A ...
前端模拟POST发送数据-Chrome下的REST Client(接口测试利器) -
higkoo:
一个非常棒的系统,要是能支持LDAP等开源认证就完美了。
Cynthia 是个问题管理/BUG管理/任务管理/项目管理系统。 -
寻光之旅:
标签库使用有啥好处呢?
thinkphp 使用标签库的步骤 -
lgdjy123:
Android:TextView属性大全
相关推荐
路径别名** - **定义**: 用于简化文件路径的引用方式。 - **用途**: 方便维护文件路径,避免硬编码路径带来的问题。 **10. 开发规范** - **URL**: 设计友好的URL。 - **代码**: 遵循一致的编码风格。 - **配置**...
- 根据不同的部署环境(如开发、测试、生产),配置相应的应用环境设置,以满足不同环境下的特殊需求。 #### 五、结语 **Yii 2.0** 不仅是一款强大的Web开发框架,更是现代Web开发理念和技术的集合体。通过深入...
11. 路径别名与命名空间(Namespaces) - Yii框架使用命名空间来组织代码,以避免类名之间的冲突。 - 路径别名是一个简短的名称,代表了一个文件或目录的路径。 12. 开发规范 - Yii有一套开发规范,包括URL设计...
- **功能**: 路径别名提供了一种方便地引用文件和目录的方法。 **10. 开发规范** - **功能**: 为了保持代码的一致性和可维护性,需要遵循一定的开发规范。 - **内容**: - **URL**: 规范URL的设计。 - **代码**: ...
这些别名帮助开发者区分不同部分的文件位置,并统一管理与之相关的资源和配置。 总之,Yii2.0预定义的别名功能为开发者提供了一种便捷的方式来引用应用程序中的路径和URL,有助于维护和部署。它们可以用来在配置...
Yii2框架提供了一些预定义的路径别名,方便引用不同目录: - `@yii`:框架核心目录 - `@app`:当前运行应用的基础路径 - `@common`:公共文件目录 - `@frontend`:前端Web应用目录 - `@backend`:后端Web应用目录 - ...
在Yii2项目中安装Imagine之后,就可以通过Yii2的别名系统(Yii::getAlias)来引用本地文件系统中的图片资源路径,这样的好处在于,无论项目部署在何种环境,代码中的文件路径都能被正确解析。 Imagine的使用方法在...
它可以使用路径别名,这意味着Yii框架允许使用别名来引用项目中的路径,使得文件路径更加灵活和可维护。 - $baseUrl:这个属性指定了资源文件的URL。如果设置了$basePath属性,那么资源管理器会自动处理资源的发布...
这通过Yii::getPathOfAlias方法来获取webroot别名对应的路径,并拼接上具体的目录路径来实现。如果目录不存在,使用mkdir方法创建目录。 然后定义文件的名称,并最终使用saveAs方法保存文件。saveAs方法接受两个...