ThinkPHP框架执行流程源码解析(1)

简介: ThinkPHP框架执行流程源码解析

前言

如果不清楚框架是怎么执行的,那么看在多的代码都是只是认识代码而已,阅读源码是为了学习其框架的设计思想和代码模式。


而执行流程则是将我们学习的东西串联在一起,从而更好地理解。咔咔也会给大家把执行流程用思维导图的方式画出来。


只要大家在本文学习到一点点的知识点,咔咔也是心满意足的。


这个流程图只是针对initialize的执行过程,其余的执行过程后期会进行补充,都是以脑图的形式呈现给大家的。


image.png


一、框架执行流程之初始化应用的数据设置

这里的内容跟容器的内容有点重复,因为执行流程是从入口文件开始的,并且最后也是通过容器执行的。


image.png


然后就会进入到文件thinkphp/library/think/App.php的run方法,在这个方法中主要就是下图框出来的地方,执行的initialize方法。


image.png


来到initialize这个方法,先看上半部分。


microtime(true);返回的是unix的微秒数

memory_get_usage返回的是分配给PHP的内存量,单位为字节

在接下来就是对框架的几个路径进行设置

static::setInstance($this);这里是将app这个实例设置为容器实例

$this->instance('app', $this);这个在之前容器章节就提到了,就是为了把app这个类绑定到容器里边去,也就是注册树模式。


image.png


这里有一个小的问题点给大家提出来,在初始化应用的这个方法里边存在这样一行代码。


有没有小伙伴对这个$this->env和下边的$this->config这俩个调用有疑惑。


如果你有疑惑那就跟着咔咔一起来看,没疑惑的就可以继续往下看了。


App这个类是继承的容器类,那么这个env和config不论是在app还是container类中都是没有这俩个属性的。


那么怎么就可以直接调用呢!而且代码追踪都会追踪到env类和container类中。


需要知道这个源头就需要我们去在大致的看一遍container类的代码。


image.png


经过一番苦读之后,可以看到下图的几行代码。这几行代码全部使用的是魔术方法。


当访问env类不存在的时候就会去执行make方法。


make这个方法在容器那一章节进行的细的不能再细的解读了。


这个make方法最终会返回一个类的实例,并且还会存到容器里边。


image.png


这里只放一个make方法的代码,如果有不会的可以去看之前的文章。


image.png


最后就是加载一系列的数据,加载详情请看前言的思维导图。


image.png


二、如何查看一个方法都在哪里执行了

在阅读源码的过程中,有一个很难把控的问题就是一个方法在不同的地方进行了调用,但是咱们确一时半会根本不知道都在哪里调用了。


这里用init方法来做一个演示。


init方法是初始化应用或者模块的一个方法,但是这里的module参数确实一个空值。


image.png


先做一个断点查看一下相关的数据信息。


打印的结果就是空,这就是一些新学习的伙伴会犯的一个错误,因为这个方法不可能只调用一次的。


如果初始化模块都是空那么这个方法就没有存在的必要了。


image.png

image.png


那么正确的断点方式应该是这个样子的。


image.png



相关文章
|
2天前
|
XML 人工智能 Java
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
Spring Bean名称生成规则(含源码解析、自定义Spring Bean名称方式)
|
10天前
yolo-world 源码解析(六)(2)
yolo-world 源码解析(六)
20 0
|
10天前
yolo-world 源码解析(六)(1)
yolo-world 源码解析(六)
13 0
|
10天前
yolo-world 源码解析(五)(4)
yolo-world 源码解析(五)
22 0
|
25天前
|
XML Java Android开发
Android实现自定义进度条(源码+解析)
Android实现自定义进度条(源码+解析)
52 1
|
29天前
|
存储 NoSQL 算法
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)(二)
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)
47 0
|
10天前
yolo-world 源码解析(五)(1)
yolo-world 源码解析(五)
31 0
|
10天前
yolo-world 源码解析(二)(2)
yolo-world 源码解析(二)
22 0
|
10天前
Marker 源码解析(二)(3)
Marker 源码解析(二)
16 0

推荐镜像

更多