zoukankan      html  css  js  c++  java
  • Yii2.0源码分析之——YiiBase自动加载类、引用文件(autoload)


    原文链接:http://www.yiifans.com/forum.php?mod=viewthread&tid=52
    在Yii2中这个函数是用来加载类的,没有直接引用文件的相关实现。但是这个也可以用来引用文件。

        public static function autoload($className)
        {
                /*
                 * $classMap是一个name-value数组,
                 * name为类的名称,
                 * value为这个类的文件路径,其中路径可包含别名
                 * 
                 * 首先在$classMap中查找是否设置了类别名路径
                 */
            if (isset(static::$classMap[$className])) {
                $classFile = static::$classMap[$className];
                //如果路径是别名,获取别名路径
                if ($classFile[0] === '@') {
                    $classFile = static::getAlias($classFile);
                }
            //如果$className以""开头,如:'aMyClass'
            //则会生成别名 '@a/b/MyClass.php',然后获取对应的别名路径。
            } elseif (strpos($className, '\') !== false) {
                $classFile = static::getAlias('@' . str_replace('\', '/', $className) . '.php', false);
                if ($classFile === false || !is_file($classFile)) {
                    return;
                }
            } else {
                return;
            }
    
            //引用文件
            include($classFile);
    
            //如果debug,并且类不存在....
            //则异常
            //所以 在关闭debug的情况下 也是可以加载文件的
            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?");
            }
        }
  • 相关阅读:
    es6-箭头函数
    高度自适应的div
    移动端css水平垂直居中
    跨域2-常用的跨域方式
    跨域1-CORS跨域
    前端路由分类
    K8S系列-2.常用命令
    Git多分支管理
    微服务-01初识
    VirtualBox虚拟Centos磁盘文件扩容
  • 原文地址:https://www.cnblogs.com/yiifans/p/3735079.html
Copyright © 2011-2022 走看看