一、类的自动加载
核心文件 '/library/think/Loader.php'
1、Composer自动加载支持
// Composer自动加载支持
if (is_dir(self::$composerPath)) { //如果存在$composerPath这个目录
if (is_file(self::$composerPath . 'autoload_static.php')) {//该目录下的autoload_static.php
require self::$composerPath . 'autoload_static.php';
$declaredClass = get_declared_classes();
$composerClass = array_pop($declaredClass);
foreach (['prefixLengthsPsr4', 'prefixDirsPsr4', 'fallbackDirsPsr4', 'prefixesPsr0', 'fallbackDirsPsr0', 'classMap', 'files'] as $attr) {
//autoload_static.php 下面有$prefixLengthsPsr4和$prefixDirsPsr4 这两个里面的都可以自动加载
if (property_exists($composerClass, $attr)) {
self::${$attr} = $composerClass::${$attr};
}
}
} else {
self::registerComposerLoader(self::$composerPath);
}
}
如果相关的类库不是通过Composer自动自动安装,而是直接复制的代码就可以通过修改autoload_static.php这个文件实现自动加载
2、注册命名空间定义
self::addNamespace([
'think' => __DIR__,
'traits' => dirname(__DIR__) . DIRECTORY_SEPARATOR . 'traits',
]);
讲白了就是加载了tp的核心类库 thinkphp\library\ 下的 think和traits两个核心类库,如果以后有相关的类库放在这个目录下面可以通过修改这段代码实现自动加载
3、加载类库映射文件
if (is_file($rootPath . 'runtime' . DIRECTORY_SEPARATOR . 'classmap.php')) {
self::addClassMap(__include_file($rootPath . 'runtime' . DIRECTORY_SEPARATOR . 'classmap.php'));
}
类库的映射文件可以通过下面的命令进行自动生成,
>php think optimize:autoload
如果有修改或者新增记得要更新相关
4、自动加载extend目录
self::addAutoLoadDir($rootPath . 'extend');
如果自己新建了某个类库文件夹,想要事项自动加载,可以在这个下面进行引入