专栏首页luxixingyii2代码学习-BaseYii

yii2代码学习-BaseYii

yii框架的v-2.0-alpha版本已经发布,PHP版本最低要求是PHP-5.4,将会在今年早些时候推出正式版。阅读yii2的代码,能学到很多东西,代码写的很优雅,用到了很多php-5.4版本的新特性。

BaseYii这个类,在yii2框架中被称作 core help class,在yii2框架中被很多类用到,它的namespace是yii.详情参照下图:

先说property: 他们都是静态的成员变量

  • classMap yii框架自动加载机制使用,是一个关联数组,key值为首字母不为\的类名(即namespace+classname的类全名),value是关联的类定义文件路径,这个路径也可以是路径别名(在yii中以@开始)
  • app console或者web应用的类实例
  • aliases 注册的别名路径,初始值 $aliases = ['@yii' => DIR];
  • objectConfg yii是组件式框架,objectConfig是使用createObject()创建组件或者类对象使用的配置,这个是关联数组 key值是首字母不为\的类名,value值是一个数组,使用createObject方法的时候会把value值赋给要创建的类的property

BaseYii的成员函数也都是静态方法

getVersion()返回版本信息,powered()返回版权信息,t是多语言版本翻译函数,这三个在实际开发中很少会用到,不再赘述

  • getAlias() 函数原型是: getAlias($alias, $throwException = true) 参数$alias是路径别名,功能是获取别名的真实路径,如果没有找到别名的路径, $throwException为true抛出异常 这个方法索引静态成员变量$aliases查找别名对应的路径
  • getRootAlias() 函数原型: public static function getRootAlias($alias) 返回别名的root部分,举个例子,别名@app/controller,就会返回app
  • setAlias() 函数原型:public static function setAlias($alias, $path) 向静态成员变量$aliase注册一个别名,$alias是别名名称,$path是别名路径 大概讲一下设置别名的流程,明白设置别名的原理: 首先检查$alias的值首字母是不是@,如果不是,添加@到值的首位 查找/出现的位置,确定别名$alias的root别名,如果$alias中包含/,则root的值为substr($alias, 0, $pos),否则就是本身 $path如果为空会释放已存在的别名 $path不为空,如果存在root别名在静态成员变量$aliases中,则把别名放在子别名中,否则就添加新的别名
  • autoload() 函数原型:public static function autoload($className) yii类自动加载机制,从静态成员变量$classMap索引$className 实现的具体逻辑参考源代码
  • createObject() 函数原型:public static function createObject($config) 实现组件的一个方法,创建一个组件(类)的方法,$config如果是一个字符串,那它必须是组件或者类的名称,如果是一个数组,必须设置 $config['class'],假设$config的值是 $config['class'=>'test', ['v1'=>1,'v2'=>2]] 检查静态成员变量$objectConfig是不是设置过$configConfig['test'],如果有,$configConfig['test']的合并到config中去 最后会根据传入的参数个数来决定是使用反射或者new来创建组件实例
  • configure() 函数原型:public static function configure($object, $properties) 设置对象的属性

trace ,error,warning,info.beginProfile,endProfile是日志相关操作,不再详细叙述。

BaseYii就是一个helper类,里面的方法变量贯穿在整个yii框架里,是框架的纲要,在这个类里,实现了类的自动加载机制,实现了组件的创建配置机制

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • gdb调试PHP扩展错误

    有时候,使用PHP的第三方扩展之后,可能会发生一些错误,这个时候,可能就需要更底层的方式追踪调试程序发生错误的地方和原因,熟悉linux下C编程的肯定不陌生gd...

    luxixing
  • Linux下编译安装PHP的PECL扩展

    PECL是PHP的高性能C扩展,比如当前很火热的扩展YAF,就是 鸟哥 编写的一个PECL的PHP框架,性能相当出色。 在网站对性能有很高要求的情况下,使用P...

    luxixing
  • PHP 5.3向更高版本迁移之新特性

    需要注意的是,trait的继承顺序: 来自当前类的成员覆盖了 trait 的方法,而 trait 则覆盖了被继承的方法 当多个trait被同一个类使用的时候...

    luxixing
  • 【Python 第56课】 正则表达式(2)

    有同学问起昨天那段测试代码里的问题,我来简单说一下。 1. r"hi" 这里字符串前面加了r,是raw的意思,它表示对字符串不进行转义。为什么要加这个?你可以试...

    Crossin先生
  • 通过 imagick 让 PHP 生成 PSD 文件缩略图

    第一步、安装ImageMagick   首先需要安装 ImageMagick ,因为 imagick 是一个可以供 PHP 调用 ImageMagick 功能的...

    胡尐睿丶
  • 流氓会武功 | 这款勒索软件不仅能勒索,还能DDoS

    一款名为 FireCrypt 的勒索软件正悄然来袭。它不仅具备一般勒索软件的特性,会将受感染的系统文件恶意加密。还会试图利用受感染者机器,向其源码中硬编码的 U...

    FB客服
  • day2、Linux别名

    Linux中修改配置别名 ####用到的命令:   alias 是用来查看系统中有什么别名   source 让配置生效 临时取消别名的方法   unalias...

    863987322
  • Java简答面试题(一)

    1.问题:介绍一下 finalize 方法 答案: final: 常量声明。 finally: 处理异常。 finalize: 帮助进行垃圾回收。接口里声明的...

    葆宁
  • DXGI快速截屏桌面直播技术

      很多地方都需要用到截屏/录屏技术,比如桌面直播,桌面录制等等。在微软Windows平台,有很多截屏的接口,不过大多数性能并不理想,Windows8以后微软引...

    hbstream
  • 正则表达式学习笔记(初级篇)

    正则对于新人来说是一个头疼的名字,让人闻而生畏。但是,在我看来,正则,并没有那么神秘,希望能通过这篇正则表达式入门教程解除正则新人对于正则的畏惧感。

    聚沙成塔

扫码关注云+社区

领取腾讯云代金券