thinkphp5 源码分析之自动加载器

最近做项目用到了Thinkphp5 感觉很多地方还不是特别清晰,在此阅读源码做个记录;有分析的不对的地方请大家批评指正

自动加载器

1.为什么框架需要一个自动加载器?

当然有很多不同的解释,不过在我看来,最主要的作用还是实现类的懒加载,即当创建类时才为程序加载对应的类。

2.怎么应用自动类加载器加载创建的自定义类

在extend 目录下创建自定义类,注意类名和文件名要保持一致,最后在使用的地方直接引用就可以了
如果需要使用命名空间,需要特殊注意,命名空间必须 以文件夹的形式存在
thinkphp5 源码分析之自动加载器_第1张图片

3.Thinkphp5 如何实现自动加载器
(1)index.php中引入启动strat.php
thinkphp5 源码分析之自动加载器_第2张图片
composer自动加载,由于项目暂时用不到,就先不分析了
spl_autoload_register() 方法注册类加载方法,当执行中遇到未知类会自动调用Loader::autoload方法(注意这里autoload方法必须是静态的)这里的注册过程和Loader::autoload中检索类过程是一一对应的,所以分析下面三个注册和查找过程:

thinkphp5 源码分析之自动加载器_第3张图片

这里其实本质上就是为Loader这个静态类,注册命名空间的路径,本质上来说就是key==》value的值对应,只不过为了优化查找效率将值分别存储,一组用来存储所有的命名空间Key 和vlaue的对应如下图 变量名为$prefixDirsPsr4,

thinkphp5 源码分析之自动加载器_第4张图片

有了上面的分析注册命名空间的任务就很明确了
1 注册空间名称和地址
2 并且字典成员变量添加注册
源码如下:
$prefix 空间前缀
$paths 路径
$prepend 预先设置的优先级更高

thinkphp5 源码分析之自动加载器_第5张图片

自动加载 extend 目录
image.png

3.查找过程
thinkphp5 源码分析之自动加载器_第6张图片

thinkphp5 源码分析之自动加载器_第7张图片

thinkphp5 源码分析之自动加载器_第8张图片

你可能感兴趣的:(php)