yii2代码学习-BaseYii

1424 查看

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框架里,是框架的纲要,在这个类里,实现了类的自动加载机制,实现了组件的创建配置机制