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?");
            }
        }
  • 相关阅读:
    卡嘉mysql命令
    Go并发控制和超时控制
    sync包介绍
    Golang-RSA加密解密-数据无大小限制
    GO json 如何转化为 map 和 struct
    go之gorm
    go mod 生成 vendor
    go语言中找&和*区别
    Swoole的process通信的方式
    centos安装python3
  • 原文地址:https://www.cnblogs.com/yiifans/p/3735079.html
Copyright © 2011-2022 走看看