`
fantom
  • 浏览: 141937 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

YII的别名管理与对象创建管理 {转}

    博客分类:
  • yii
 
阅读更多
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)。



来源地址:http://www.yiiframework.com/forum/index.php?/topic/16933-yii%E7%9A%84%E5%88%AB%E5%90%8D%E7%AE%A1%E7%90%86%E4%B8%8E%E5%AF%B9%E8%B1%A1%E5%88%9B%E5%BB%BA%E7%AE%A1%E7%90%86/
  • 大小: 34.5 KB
  • 大小: 10.9 KB
分享到:
评论

相关推荐

    深入理解Yii2.0 最新版

    Yii2.0中的对象与组件(Component)有着紧密联系,同时对象的配置方法也非常重要。事件(Event)和行为(Behavior)是Yii2.0的高级特性,涉及事件的绑定、触发和处理,以及如何在对象中定义和使用行为。 2. Yii2.0...

    Yii教案素材整理

    应用是全局范围内可以访问的对象,它管理协调各个组件完成请求处理。应用组件是注册在应用中的对象,为应用提供各种功能。模块是包含完整MVC结构的独立包,可以构成复杂应用的不同部分。过滤器是控制器在处理请求...

    Yii框架PDF中文文档

    **扩展Yii**:介绍了如何使用现有的扩展、创建自己的扩展以及如何使用第三方库。 **测试**:包括定义fixture、单元测试、功能测试等内容。测试是保证软件质量的重要手段之一,在Yii框架中有很好的支持。 #### 五、...

    php yii源码分析

    2. **Yii 类与 YiiBase**: `Yii` 类继承自 `YiiBase`,这意味着 `Yii` 拥有 `YiiBase` 中的所有静态属性和方法。`Yii` 类提供了一系列静态方法,如用于创建应用实例的 `createWebApplication`,这些方法方便开发者...

    Yii面试题摸底测试教学考前摸底

    #### 四、Yii2的常见系统别名 **知识点解析:** - **@app:** 指向应用根目录。 - **@web:** 指向公共资源目录。 - **@runtime:** 指向运行时目录。 - **@vendor:** 指向Composer安装的第三方包目录。 - **@...

    YII快速入门教程

    ### YII快速入门教程知识点详解 #### 一、基本概念 **1. 入口文件** - **定义**: 入口文件是启动Yii框架的第一个PHP文件。它负责加载Yii框架的核心文件并设置运行环境。 - **作用**: 初始化环境变量、加载配置...

    Yii2中文手册(中文教程完整版)

    已定稿 路由(Route)引导与创建 URL 已定稿 请求(Request) 已定稿 响应(Response) 已定稿 Sessions(会话)和 Cookies 已定稿 错误处理 已定稿 日志 关键概念 已定稿 组件(Component) 已定稿 属性(Property...

    Yii框架文档(2010.7.18)

    Yii使用路径别名和命名空间来简化路径管理,并且提高代码的组织性和可维护性。 #### 约定 Yii采用了一些约定来简化配置过程,例如约定控制器类应该放在`protected/controllers`目录下。 ### 开发流程 在Yii框架中...

    yii框架语言基础

    - Yii框架通过ActiveRecord和数据访问对象(DAO)两种方式提供了数据库操作的功能。 - ActiveRecord模式使得数据库操作更加简洁,而DAO提供更底层的数据库访问。 16. 测试 - 测试在Yii框架开发中占据重要地位,...

    yii快速入门教程--一个非常好的php框架

    接下来,通过`require_once()`函数加载Yii框架的核心文件,并通过`Yii::createWebApplication()`方法创建一个Web应用实例,最后通过`->run()`方法启动该应用。 **2. 主配置文件** - **保存位置**: `你的应用/...

    Yii快速入门手册

    1. 创建模型:在Yii中创建模型涉及定义模型类、声明验证规则、安全特性赋值、触发验证、提取验证错误以及特性标签。 2. 创建动作:动作决定了在控制器中当特定URL被请求时将执行哪些代码。 3. 创建表单:表单用于...

    Yii2创建控制器(createController)方法详解

    本文将详细解析Yii2中createController方法的使用,以及与之相关的重要知识点。 在Yii2框架中,控制器是响应用户请求并返回输出的中心组件。控制器负责处理各种业务逻辑,并将结果通过视图呈现给用户。在Yii2的MVC...

    yii框架文档

    - **网址管理**:创建用户友好的URL。 - **验证和授权**:确保数据的有效性和安全性。 - **主题**:为应用程序定制外观。 - **日志**:记录应用程序运行时的信息。 - **错误处理**:处理异常情况。 - **Web服务**:...

    Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)

    4. **别名设置与获取**:Yii2 提供了 `setAlias` 和 `getAlias` 方法来创建和获取别名,这在处理路径时非常有用,可以使代码更具有可维护性。 5. **Yii2获取当前URL和域名**:可以使用`yii\helpers\Url::current()`...

    Yii框架函数简单用法分析

    4. **Namespace Aliasing**: 使用`as`关键字可以在导入类时创建别名,避免类名冲突。例如,如果你有两个类文件中都包含名为`MyClass`的类,你可以这样导入其中一个:`use MyClass as MyCustomClass;`,之后在代码中...

    YII Framework的filter过滤器用法分析

    YII框架中的filter过滤器是该框架提供的一个强大功能,它允许开发者在控制器动作执行之前或之后执行一段自定义的代码,用以完成如访问控制、性能监控、数据验证等任务。过滤器的实现方式可以是通过控制器类中的特定...

    Yii2第三方类库插件Imagine的安装和使用

    在Yii2项目中安装Imagine之后,就可以通过Yii2的别名系统(Yii::getAlias)来引用本地文件系统中的图片资源路径,这样的好处在于,无论项目部署在何种环境,代码中的文件路径都能被正确解析。 Imagine的使用方法在...

Global site tag (gtag.js) - Google Analytics