前言
目前在整理PHP进阶路线图,如有好的建议咔咔会第一时间进行收录。
一、自动加载loader源码分析
1-1 学习目标
- 类的自动加载
- 类自动加载的俩种方式
- spl_autoload_register必须会使用
- 实现自定义文件的类的自动加载
1-2 Composer加载
从上图咔咔给的解析图,在base.php中首先加载了loader类,接着调用了register这个方法。
来到thinkphp\library\think\Loader.php有一个register的方法,在这个方法里边,我们先学习第一个知识点spl_autoload_register()聊聊spl_autoload_register前世今生和简单使用,直接点击即可查看。
紧接着就是项目的根路径和composer的路径。
从这里开始就是在加载composer文件,过程也是很简单
1.判断composer是否为目录
2.判断路径下面的autoload_static.php是否为文件
3.引入autoload_static.php文件
4.返回所有已经声明的所有类 数组返回
5.获取最后一个类ComposerStaticInit30742487e00917c888d89ba216f165b9
6.判断ComposerStaticInit30742487e00917c888d89ba216f165b9中是否存在数组中的数据
接着可以去vendor\composer\autoload_static.php文件中可以看到这俩个属性
这里有一段代码估计有一部分同学会在这里绕一下self::${$attr} = $composerClass::${$attr};,这里的$attr就是'prefixLengthsPsr4', 'prefixDirsPsr4', 'fallbackDirsPsr4', 'prefixesPsr0', 'fallbackDirsPsr0', 'classMap', 'files'这些数据,外层在加一个$符号。
从而在ComposerStaticInit30742487e00917c888d89ba216f165b9这个类中直接获取对应的属性值,也就是上图的俩个属性值。