ThinkPHP自动加载Loader源码分析(3)

简介: ThinkPHP自动加载Loader源码分析

二、简说类的加载过程


image.png


在刚刚开始解析这里的源码时就有一个函数spl_autoload_register


当需要使用的类没有被引入时,这个函数会在PHP报错前被触发,未定义的类名会被当作参数传入这里会直接去执行think\\Loader::autoload这个方法


image.png


经过断点第一个未加载的类就是think\Error


image.png


为什么是think\Error呢!可以在回到thinkphp/base.php看一下,当自动加载完执行完成后第一个执行的类就是Error


image.png


可以简单的做个测试,将这Error改为Kaka,进行打印一下,这时的类就改变为Kaka。到这里大家对这个类的自动加载机制就有一定的了解了。


当使用的类没有被引入时会把这个类当做参数传到thinkphp/library/think/Loader.php的autoload方法中。


image.png


到这里在进行看一下autoload这个方法


image.png


先从findFile这个方法走,把未引入的类传入这个方法中,在findFile这个方法中会直接从classMap这个属性中直接把think\Error这个类映射的文件直接返回出来


image.png


将think\Error这个类的完整路径返回给autoload的file变量后,把win环境的大小写给判断了一次。


然后直接使用include引入文件即可,直到返回。


直到这里就是一次完整的类的自动加载解析。


image.png


虽然到这里结束了,但是还是得在提一点就是$classMap这个属性,这个属性是基于文件classmap.php来到,这个文件的生成也是需要执行命令php think optimize:autoload生成的。


当没有生成这个文件时程序是如何执行的呢!


之前的所有流程都是一样的,只有在findFile这里不一样,接下来进行简单的梳理一下。


这时代码肯定不会走classMap


image.png


先获取think\Error文件


image.png


然后经过Composer自动加载中的俩个属性进行获取命名空间,在把think\Error.php文件进行拼接


image.png


最终返回的结果也是D:\phpstudy_pro\WWW\ThinkPHPSourceCodeAnalysis\thinkphp\library\think\Error.php这个文件。


这里的代码需要好好的阅读一下。


类的自动加载到这里就是完全结束了。



相关文章
|
6月前
|
PHP
深入理解composer自动加载原理
深入理解composer自动加载原理
43 0
|
设计模式 存储 架构师
ThinkPHP5源码阅读-类的自动加载register与autoload的实现
PHP快速入门与实战ThinkPHP是国内最流行的一款PHP框架,是国人自主研发的框架,起源于2006年,经过了十几年的不断发展。已经成为了一款被PHP广泛认可的性能开发效率兼具的利器。阅读框架源码有助于我们更好的学习语言基础,拓展设计模式等相关能力。同时很多设计与编码的思想也能更好的指导我们日常工作,尤其是想成为资深程序员或者架构师方面的同事,这是一个必须要学习的过程。今天是ThinkPHP5源码第一讲,关于类的自动加载,看看源码底层是怎么实现的。怕迷路的同学,先给个关注吧。
102 0
|
设计模式 前端开发
Yii2.0的主要目录结构是什么?底层原理是什么?
Yii2.0的主要目录结构是什么?底层原理是什么?
150 0
Yii2.0的主要目录结构是什么?底层原理是什么?
|
缓存 数据库连接 PHP
Yii2.0的配置文件是什么?底层原理是什么?
Yii2.0的配置文件是什么?底层原理是什么?
115 0
Yii2如何实现自动加载?底层原理是什么?
Yii2如何实现自动加载?底层原理是什么?
151 0
|
PHP
ThinkPHP自动加载Loader源码分析(4)
ThinkPHP自动加载Loader源码分析
133 0
ThinkPHP自动加载Loader源码分析(4)
|
PHP
ThinkPHP自动加载Loader源码分析(2)
ThinkPHP自动加载Loader源码分析
159 0
ThinkPHP自动加载Loader源码分析(2)
|
PHP
ThinkPHP自动加载Loader源码分析(1)
ThinkPHP自动加载Loader源码分析
162 0
ThinkPHP自动加载Loader源码分析(1)
|
运维 关系型数据库 MySQL
ThinkPHP你必须要掌握的配置加载(2)
ThinkPHP你必须要掌握的配置加载
194 0
ThinkPHP你必须要掌握的配置加载(2)
|
PHP
ThinkPHP你必须要掌握的配置加载(1)
ThinkPHP你必须要掌握的配置加载
146 0
ThinkPHP你必须要掌握的配置加载(1)