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

vendor/yiisoft/yii2/BaseYii.php——

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

         return false;
     }

类自动加载方法:

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));
        }
    }

获取日志记录方法:

 private static $_logger;//声明静态变量

     /**
      * @return Logger message logger
      */
     public static function getLogger()
     {
         if (self::$_logger !== null) {//如果当前的静态变量不为空,返回$_logger
             return self::$_logger;
         } else {
             return self::$_logger = static::createObject('yii\log\Logger');//否则,返回yii\log\Logger方法
         }
     }

设置日志记录方法:

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

日志记录trace信息方法:

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

日志记录error信息方法:

 public static function error($message, $category = 'application')//参数为错误信息和信息类型
     {
          }

操作信息日志:

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

开始性能分析方法:

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

结束性能分析方法:

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

输出power信息方法:

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

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

 public static function t($category, $message, $params = [], $language = null)//\yii\i18n\I18N::translate()方法的短方法
     {
         if (static::$app !== null) {//如果 \yii\console\Application|yii\web\Application 实例为空
             return static::$app->getI18n()->translate($category, $message, $params, $language ?: static::$app->language);                 //调用translate()方法,用$params中的值替换$message中对应的值,$language为空,采用默认语言                                    
         } else {
             $p = [];
             foreach ((array) $params as $name => $value) {//否则,遍历$params
                 $p['{' . $name . '}'] = $value;//以$params 的名和值构建索引数组
             }

             return ($p === []) ? $message : strtr($message, $p);//如果构建的数组值为空,返回输入的信息,否则用构建的数组的值替换$message中的值然后返回
         }
     }

配置方法:

  public static function configure($object, $properties)
     {
         foreach ($properties as $name => $value) {
             $object->$name = $value;//将对象的属性按键值对的形式配置
         }

         return $object;
     }

返回对象中变量的方法:

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

BaseYii.php结束。

Yii源码阅读笔记(三)的更多相关文章

  1. Yii源码阅读笔记(一)

    今天开始阅读yii2的源码,想深入了解一下yii框架的工作原理,同时学习一下优秀的编码规范和风格.在此记录一下阅读中的小心得. 每个框架都有一个入口文件,首先从入口文件开始,yii2的入口文件位于we ...

  2. Werkzeug源码阅读笔记(三)

    这次主要讲下werkzeug中的Local. 源码在werkzeug/local.py Thread Local 在Python中,状态是保存在对象中.Thread Local是一种特殊的对象,它是对 ...

  3. Yii源码阅读笔记(三十五)

    Container,用于动态地创建.注入依赖单元,映射依赖关系等功能,减少了许多代码量,降低代码耦合程度,提高项目的可维护性. namespace yii\di; use ReflectionClas ...

  4. Yii源码阅读笔记(三十四)

    Instance类, 表示依赖注入容器或服务定位器中对某一个对象的引用 namespace yii\di; use Yii; use yii\base\InvalidConfigException; ...

  5. Yii源码阅读笔记(三十三)

    ServiceLocator,服务定位类,用于yii2中的依赖注入,通过以ID为索引的方式缓存服务或则组件的实例来定位服务或者组件: namespace yii\di; use Yii; use Cl ...

  6. Yii源码阅读笔记(三十二)

    web/Application类的注释,继承base/Application类,针对web应用的一些处理: namespace yii\web; use Yii; use yii\base\Inval ...

  7. Yii源码阅读笔记(三十一)

    Widget类中开始,获取视图对象,获取widget ID,渲染视图,获取路径方法注释: private $_id; /** * Returns the ID of the widget. * 返回插 ...

  8. Yii源码阅读笔记(三十)

    Widget类是所有小部件的基类,开始,结束和渲染小部件内容的方法的注释: namespace yii\base; use Yii; use ReflectionClass; /** * Widget ...

  9. Yii源码阅读笔记(八)

    前面阅读了Yii2的两个基本类Object和Component,了解了Yii的三个重要概念属性.事件.行为,下面开始阅读Event类,Event类是所有事件类的基类: <?php /** * @ ...

随机推荐

  1. js call apply caller callee bind

    call apply bind作用类似.即调用一个对象的一个方法,以另一个对象替换当前对象. call 语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) ...

  2. Xamarin.Android开发实践(十二)

    Xamarin.Android之ContentProvider 一.前言 掌握了如何使用SQLiteOpenHelper之后,我们就可以进行下一步的学习.本章我们将会学习如何使用ContentProv ...

  3. laravel 安装及入门

    Composer安装过程 一.安装Composer 首先你需要安装Composer,Composer是PHP依赖管理工具,Laravel框架就是使用 Composer 执行安装和依赖管理.  注: ( ...

  4. 《数据结构与算法分析》学习笔记(四)——栈ADT

    一.栈ADT是what? 1.定义 栈,是限制插入和删除都只能在一个位置上进行的表. 2.图示 3.栈的基本功能 (1)是否为空 (2)进栈 (3)出栈 (4)清空 (5)取栈顶 二.栈的链表实现 # ...

  5. MATLAB学习笔记(四)——文件操作

    首先,声明,如果学过C的话就可以不用看了,因为是一样的,只要注意一些系统变量的名字稍微变动了而已.都是基于ANSI C语言的标准库函数写的. (一)文件的打开与关闭 一.文件的打开 1.语法 fid= ...

  6. codeforces732D 二分加贪心。。

    啊,不好意思..这个题窝也不会,看了网上的题解做的.. 先说一下题意.. 你要考试了..然后你有n天的时间准备以及进行考试 并且,每一天..要么你花一天时间去考一门(每天只能考一门),要么花一天时间休 ...

  7. Android 建立文件夹、生成文件并写入文本文件内容

    一.首先添加权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">& ...

  8. intersection

    用来找到两个rdd的交集,注意,最终的new rdd的分区数量取决于两个rdd中的最大分区数量. 测试一下: val data1 = sc.parallelize(1 to 20,1) val dat ...

  9. JVM常用参数配置

    Trace跟踪参数 -verbose:gc -XX:+printGC 打印GC的简要信息 -XX:+PrintGCDetails 打印GC详细信息 -XX:+PrintGCTimeStamps 打印C ...

  10. POJ2699 The Maximum Number of Strong Kings(最大流)

    枚举所有Strong King的状态(最多1024种左右),然后判断是否合法. 判定合法用网络流,源点-比赛-人-汇点,这样连边. 源点向每场比赛连容量为1的边: 如果一场比赛,A和B,A是Stron ...