概述
最近做项目用到了Thinkphp5 感觉很多地方还不是特别清晰,在此阅读源码做个记录;有分析的不对的地方请大家批评指正
自动加载器
1.为什么框架需要一个自动加载器?
当然有很多不同的解释,不过在我看来,最主要的作用还是实现类的懒加载,即当创建类时才为程序加载对应的类。
2.怎么应用自动类加载器加载创建的自定义类
在extend 目录下创建自定义类,注意类名和文件名要保持一致,最后在使用的地方直接引用就可以了
如果需要使用命名空间,需要特殊注意,命名空间必须 以文件夹的形式存在
调用必须带上命名空间的前缀~~~~
3.Thinkphp5 如何实现自动加载器
(1)index.php中引入启动strat.php
(2)在strat.php中执行应用之前,调用base.php
base.php 会定义部分常量,然后执行注册自动加载类
composer自动加载,由于项目暂时用不到,就先不分析了
spl_autoload_register() 方法注册类加载方法,当执行中遇到未知类会自动调用Loader::autoload方法(注意这里autoload方法必须是静态的)这里的注册过程和Loader::autoload中检索类过程是一一对应的,所以分析下面三个注册和查找过程:
这里其实本质上就是为Loader这个静态类,注册命名空间的路径,本质上来说就是key==》value的值对应,只不过为了优化查找效率将值分别存储,一组用来存储所有的命名空间Key 和vlaue的对应如下图 变量名为$prefixDirsPsr4,
另外一组类似与字典,key为所有命名空间的首字母和对应的值,变量名为$prefixLengthsPsr4
有了上面的分析注册命名空间的任务就很明确了
1 注册空间名称和地址
2 并且字典成员变量添加注册
源码如下:
$prefix 空间前缀
$paths 路径
$prepend 预先设置的优先级更高
加载类库映射文件
这里直接是key ==》 的存储
自动加载 extend 目录
3.查找过程
最后在添加一点PRS-0; 和PRS-4的只是
5 PRS-0 PRS-4区别
PRS-0
PRS-4
最后
以上就是怕孤独西牛为你收集整理的thinkphp 框架自动加载原理_thinkphp5 源码分析之自动加载器的全部内容,希望文章能够帮你解决thinkphp 框架自动加载原理_thinkphp5 源码分析之自动加载器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复