ThinkPHP你必须要掌握的配置加载(3)

简介: ThinkPHP你必须要掌握的配置加载


六、Config源码剖析

虽说上面的Yaconf对于config的源码解析没有多大的帮助,但是也是在扩宽一下思路,以后在工作中可以尝试使用Yaconf。


进入正题,想知道Config是怎么进行加载解析的,先来画一个图。一起看一下加载config的执行流程。


image.png


回到public/index.php,在上一期说了类的自动加载是在加载base.php文件的过程中执行的。


那么config的加载是在下图框起来的这里,这里涉及到了容器,会有一个单独的专题来对容器进行剖析。


这里就不过多说明了,这段代码回去执行`D:\phpstudy_pro\WWW\ThinkPHPSourceCodeAnalysis\thinkphp\library\think\App.php这个文件的run方法。


image.png


并且在run方法中需要追踪的是initialize应用初始化这个函数


image.png


接着在initialize这个方法中就会看到配置文件的蛛丝马迹,随之而来就是一个初始化应用init


image.png


直到走到init方法中,才算是进入了主题。


开始了自动加载配置文件,并且还调用了config类中的load方法,也是需要一起阅读的。


image.png


来到这里之后需要简单的进行解读一下


这段代码会直接走到elseif中,因为在app目录下没有设置config目录


并且这里有个configPath这个属性熟悉吧!这个值最终就是D:\phpstudy_pro\WWW\ThinkPHPSourceCodeAnalysis\config\


image.png


在接这就是把config目录下的文件全部拿出来。


传递给config类的load方法


在这里有几个知识点提一下,就当回顾了


scandir :以升序的方式返回一个目录下的所有文件,还有第二个参数1,表示降序的方式返回一个目录下的所有文件。

pathinfo:以数组的形式返回文件信息,分别为目录名、文件名、扩展名,其中的几个参数代码中有提到,可以看下图即可。

在这段代码中有一个属性configExt,这个值是在环境变量读出来的,给的值是php


image.png


紧接着就需要来到thinkphp/library/think/Config.php这个文件了,在app文件中最后调用了config类中的load。


一起来看看都经历了什么


在load这个方法中,流程的最终走向会到loadFile这个方法中,至于elseif的代码为什么不会走,或者说这段代码就是多余的。


因为当Yaconf安装后在PHP启动后就会直接去加载对应的配置文件


image.png


来到loadFile这个文件后


我们都知道在ThinkPHP框架中,config目录下的所有文件都是PHP类型的


所以在判断了类型后就直接进入到set里边进行数据的处理


include直接引入的就是config目录下的配置文件,并且所有的配置文件都是直接return返回一个数组


image.png


在set方法中,这块代码就是核心了


一直循环合并数组,最终把所有的配置信息都返回给了config这个属性


截止到这里config目录下的所有配置就加载完成了。


image.png


以上就是config的加载流程,其实当你阅读完之后感觉也没有那么的难,就是编码技巧和思想。


而我们阅读源码不是看它代码怎么写的,是学习的它的编码思想,最终落地到我们自己的项目中。



相关文章
|
7月前
|
PHP
thinkphp中自定义文件上传
thinkphp中自定义文件上传
44 0
|
运维 关系型数据库 MySQL
ThinkPHP你必须要掌握的配置加载(2)
ThinkPHP你必须要掌握的配置加载
203 0
ThinkPHP你必须要掌握的配置加载(2)
|
XML JSON 数据处理
ThinkPHP你必须要掌握的配置加载(4)
ThinkPHP你必须要掌握的配置加载
134 0
ThinkPHP你必须要掌握的配置加载(4)
|
PHP
ThinkPHP你必须要掌握的配置加载(5)
ThinkPHP你必须要掌握的配置加载
169 0
ThinkPHP你必须要掌握的配置加载(5)
|
PHP
ThinkPHP你必须要掌握的配置加载(1)
ThinkPHP你必须要掌握的配置加载
150 0
ThinkPHP你必须要掌握的配置加载(1)
|
设计模式 运维 安全
ThinkPHP你必须要掌握的配置加载(6)
ThinkPHP你必须要掌握的配置加载
211 0
ThinkPHP你必须要掌握的配置加载(6)
|
PHP
ThinkPHP自动加载Loader源码分析(2)
ThinkPHP自动加载Loader源码分析
163 0
ThinkPHP自动加载Loader源码分析(2)
|
PHP
ThinkPHP自动加载Loader源码分析(4)
ThinkPHP自动加载Loader源码分析
139 0
ThinkPHP自动加载Loader源码分析(4)
|
PHP
ThinkPHP自动加载Loader源码分析(1)
ThinkPHP自动加载Loader源码分析
167 0
ThinkPHP自动加载Loader源码分析(1)
|
PHP
ThinkPHP自动加载Loader源码分析(3)
ThinkPHP自动加载Loader源码分析
329 0
ThinkPHP自动加载Loader源码分析(3)