AI写作智能体 自主规划任务,支持联网查询和网页读取,多模态高效创作各类分析报告、商业计划、营销方案、教学内容等。 广告
Loader类中首先定义了一些静态数组: ``` /** * @var array 实例数组 */ protected static $instance = []; /** * @var array 类名映射 */ protected static $classMap = []; /** * @var array 命名空间别名 */ protected static $namespaceAlias = []; /** * @var array PSR-4 命名空间前缀长度映射 */ private static $prefixLengthsPsr4 = []; /** * @var array PSR-4 的加载目录 */ private static $prefixDirsPsr4 = []; /** * @var array PSR-4 加载失败的回退目录 */ private static $fallbackDirsPsr4 = []; /** * @var array PSR-0 命名空间前缀映射 */ private static $prefixesPsr0 = []; /** * @var array PSR-0 加载失败的回退目录 */ private static $fallbackDirsPsr0 = []; /** * @var array 需要加载的文件 */ private static $files = []; ``` // 注册自动加载 base.php中加载了Loader.php\\think\\Loader::register();执行了Loader.php文件中Loader类里的register方法,建议从register方法读起。Loader.php 类中的register 方法如下: ``` // 注册自动加载机制 public static function register($autoload = '') { // 注册系统自动加载 spl_autoload_register($autoload ?: 'think\\Loader::autoload', true, true); // 注册命名空间定义 self::addNamespace([ 'think' => LIB_PATH . 'think' . DS, 'behavior' => LIB_PATH . 'behavior' . DS, 'traits' => LIB_PATH . 'traits' . DS, ]); // 加载类库映射文件 if (is_file(RUNTIME_PATH . 'classmap' . EXT)) { self::addClassMap(__include_file(RUNTIME_PATH . 'classmap' . EXT)); } // Composer自动加载支持 if (is_dir(VENDOR_PATH . 'composer')) { self::registerComposerLoader(); } // 自动加载extend目录 self::$fallbackDirsPsr4[] = rtrim(EXTEND_PATH, DS); } ``` # 1:spl_autoload_register($autoload ?: 'think\\Loader::autoload', true, true); /\*注册系统自动加载,加载不存在的类时,会执行此函数里的方法,$autoload一般为空值,所以加载不存在的类时, 执行的是think\\\\Loader::autoload,也就是当前类的autoload方法,think\\\\Loader为当前类的命名空间 \*/ # 2:Composer 自动加载支持(将在后续章节作为专题讲解) # 3:注册命名空间定义 ``` self::addNamespace([ 'think' => LIB_PATH . 'think' . DS, 'behavior' => LIB_PATH . 'behavior' . DS, 'traits' => LIB_PATH . 'traits' . DS, ]); ``` # 4:加载类库映射文件 ``` if (is_file(RUNTIME_PATH . 'classmap' . EXT)) { self::addClassMap(__include_file(RUNTIME_PATH . 'classmap' . EXT)); } ``` # 5:自动加载 extend 目录 ``` self::$fallbackDirsPsr4[] = rtrim(EXTEND_PATH, DS); ```