TP5源码分析-加载基础文件【Loader类入口register函数分析1】

  • 注册自动加载机制 入口函数 里面干的活 我分为五部【1】…【5】
//注册自动加载机制  入口函数 里面干的活 我分为五部
 public static function register($autoload = '')
    {
        // 【1】注册系统自动加载
        spl_autoload_register($autoload ?: 'think\\Loader::autoload', true, true);

        $rootPath = self::getRootPath();

        self::$composerPath = $rootPath . 'vendor' . DIRECTORY_SEPARATOR . 'composer' . DIRECTORY_SEPARATOR;

        // 【2】Composer自动加载支持
        if (is_dir(self::$composerPath)) {
            if (is_file(self::$composerPath . 'autoload_static.php')) {
                require self::$composerPath . 'autoload_static.php';
               // require $rootPath.'extend/Liangzai.php';
                $declaredClass = get_declared_classes();

                $composerClass = array_pop($declaredClass);
                foreach (['prefixLengthsPsr4', 'prefixDirsPsr4', 'fallbackDirsPsr4', 'prefixesPsr0', 'fallbackDirsPsr0', 'classMap', 'files'] as $attr) {
                    if (property_exists($composerClass, $attr)) {
                        self::${$attr} = $composerClass::${$attr};
                    }
                }
            } else {
                self::registerComposerLoader(self::$composerPath);
            }
        }

        // 【3】注册命名空间定义
        self::addNamespace([
            'think'  => __DIR__,
            'traits' => dirname(__DIR__) . DIRECTORY_SEPARATOR . 'traits',
        ]);

        // 【4】加载类库映射文件
        if (is_file($rootPath . 'runtime' . DIRECTORY_SEPARATOR . 'classmap.php')) {
            self::addClassMap(__include_file($rootPath . 'runtime' . DIRECTORY_SEPARATOR . 'classmap.php'));
        }

        // 【5】自动加载extend目录
        self::addAutoLoadDir($rootPath . 'extend');
    }

猜你喜欢

转载自blog.csdn.net/weixin_38048544/article/details/106978599