码迷,mamicode.com
首页 > 其他好文 > 详细

Yii源码阅读笔记(三)

时间:2016-04-12 01:47:09      阅读:239      评论:0      收藏:0      [点我收藏+]

标签:

接着上次的继续阅读BaseYii.php

vendor/yiisoft/yii2/BaseYii.php——

 1  public static function getRootAlias($alias)//获取根别名
 2     {  //查找别名中斜线的位置
 3         $pos = strpos($alias, ‘/‘);
        //根据斜线的结果判断,如果不包含斜线,表示输入为根别名,否则截取斜线前面的部分作为根别名
4 $root = $pos === false ? $alias : substr($alias, 0, $pos); 5        //判断根别名是否存在 6 if (isset(static::$aliases[$root])) { 7 if (is_string(static::$aliases[$root])) {//判断根别名的值即路径是否为字符串,如果是,返回根别名 8 return $root; 9 } else {//否则遍历别名数组,通过查找字符串函数找到根别名,返回 10 foreach (static::$aliases[$root] as $name => $path) { 11 if (strpos($alias . ‘/‘, $name . ‘/‘) === 0) { 12 return $name; 13 } 14 } 15 } 16 } 17 18 return false; 19 }

类自动加载方法:

public static function autoload($className)
    {
        if (isset(static::$classMap[$className])) {//判断传入的类是否在定义的$classMap数组常量中
            $classFile = static::$classMap[$className];//如果在,则类的路径为类名对应的路径即数组的值
            if ($classFile[0] === ‘@‘) {//取路径的第一个字符判断是否为@,如果是,则包含别名
                $classFile = static::getAlias($classFile);//解析别名作为类文件路径
            }
        } elseif (strpos($className, ‘\\‘) !== false) {//如果传入的类名不在$classMap数组中,且传入的类名为路径
            $classFile = static::getAlias(‘@‘ . str_replace(‘\\‘, ‘/‘, $className) . ‘.php‘, false);//拼接出类文件路径,支持别名
            if ($classFile === false || !is_file($classFile)) {//如果类文件不存在,则返回
                return;
            }
        } else {//路径不正确,返回
            return;
        }

        include($classFile);//包含类文件

        if (YII_DEBUG && !class_exists($className, false) && !interface_exists($className, false) && !trait_exists($className, false)) {
            throw new UnknownClassException("Unable to find ‘$className‘ in file: $classFile. Namespace missing?");//判断类是否存在,不存在抛出异常
        }
    }

创建对象方法:

public static function createObject($type, array $params = [])
    {
        if (is_string($type)) {//判断输入的参数$type是否为字符串
            return static::$container->get($type, $params);//如果是字符串,调用$container 的get方法获取对象并返回
        } elseif (is_array($type) && isset($type[‘class‘])) {//判断参数$type是否为数组,并且数组中是否有类名称
            $class = $type[‘class‘];//如果有,则类名为数组中class键的值
            unset($type[‘class‘]);//注销$type 中的类名称作为下面的配置参数--详见get方法
            return static::$container->get($class, $params, $type);//通过类名称获取对象
        } elseif (is_callable($type, true)) {//判断参数$type是否为可调用的函数
            return call_user_func($type, $params);//调用函数并返回
        } elseif (is_array($type)) {//参数$type是数组但不包含类名,抛出异常
            throw new InvalidConfigException(‘Object configuration must be an array containing a "class" element.‘);
        } else {//输入不合法,抛出异常
            throw new InvalidConfigException(‘Unsupported configuration type: ‘ . gettype($type));
        }
    }

获取日志记录方法:

 1 private static $_logger;//声明静态变量
 2 
 3     /**
 4      * @return Logger message logger
 5      */
 6     public static function getLogger()
 7     {
 8         if (self::$_logger !== null) {//如果当前的静态变量不为空,返回$_logger
 9             return self::$_logger;
10         } else {
11             return self::$_logger = static::createObject(‘yii\log\Logger‘);//否则,返回yii\log\Logger方法
12         }
13     }

设置日志记录方法:

1 public static function setLogger($logger)
2     {
3         self::$_logger = $logger;//将传入的$logger赋值给静态变量$_logger
4     }

日志记录trace信息方法:

1 public static function trace($message, $category = ‘application‘)//参数为trace信息和信息类型
2     {
3         if (YII_DEBUG) {//如果定义的YII_DEBUG
4             static::getLogger()->log($message, Logger::LEVEL_TRACE, $category);//通过logger类中的log方法输出trace信息
5         }
6     }

日志记录error信息方法:

1 public static function error($message, $category = ‘application‘)//参数为错误信息和信息类型
2     {
3         static::getLogger()->log($message, Logger::LEVEL_ERROR, $category);//通过logger类中的log方法输出error信息

4 }

操作信息日志:

1 public static function info($message, $category = ‘application‘)//参数为操作消息和消息类型
2     {
3         static::getLogger()->log($message, Logger::LEVEL_INFO, $category);//输出日志
4     }

开始性能分析方法:

1  public static function beginProfile($token, $category = ‘application‘)
2     {
3         static::getLogger()->log($token, Logger::LEVEL_PROFILE_BEGIN, $category);//输出性能分析开始记录
4     }

结束性能分析方法:

1  public static function endProfile($token, $category = ‘application‘)
2     {
3         static::getLogger()->log($token, Logger::LEVEL_PROFILE_END, $category);//输出性能分析结束记录
4     }

输出power信息方法:

1 public static function powered()
2     {
3         return \Yii::t(‘yii‘, ‘Powered by {yii}‘, [
4             ‘yii‘ => ‘<a href="http://www.yiiframework.com/" rel="external">‘ . \Yii::t(‘yii‘,
5                     ‘Yii Framework‘) . ‘</a>‘
6         ]);//返回power by 信息
7     }

短方法t(语言翻译方法):

 1 public static function t($category, $message, $params = [], $language = null)//\yii\i18n\I18N::translate()方法的短方法
 2     {
 3         if (static::$app !== null) {//如果 \yii\console\Application|yii\web\Application 实例为空
 4             return static::$app->getI18n()->translate($category, $message, $params, $language ?: static::$app->language);
                 //调用translate()方法,用$params中的值替换$message中对应的值,$language为空,采用默认语言                                    
5 } else { 6 $p = []; 7 foreach ((array) $params as $name => $value) {//否则,遍历$params 8 $p[‘{‘ . $name . ‘}‘] = $value;//以$params 的名和值构建索引数组 9 } 10 11 return ($p === []) ? $message : strtr($message, $p);//如果构建的数组值为空,返回输入的信息,否则用构建的数组的值替换$message中的值然后返回 12 } 13 }

配置方法:

1  public static function configure($object, $properties)
2     {
3         foreach ($properties as $name => $value) {
4             $object->$name = $value;//将对象的属性按键值对的形式配置
5         }
6 
7         return $object;
8     }

返回对象中变量的方法:

public static function getObjectVars($object)
    {
        return get_object_vars($object);//返回某个对象中的公共属性
    }

 BaseYii.php结束。

Yii源码阅读笔记(三)

标签:

原文地址:http://www.cnblogs.com/isleep/p/5380837.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!