问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

thinkphp3.2 载入配置文件

发布网友 发布时间:2022-04-28 03:11

我来回答

2个回答

懂视网 时间:2022-04-28 07:33

?

终于来到了正题,本文会对config配置文件加载过程进行解析,之前的所有工作都是为了本节工作做铺垫

?

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

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

在这里插入图片描述
在这里插入图片描述

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

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

这里就不过多说明了,这段代码回去执行`D:phpstudy_proWWWThinkPHPSourceCodeAnalysis hinkphplibrary hinkApp.php这个文件的run方法。

在这里插入图片描述并且在run方法中需要追踪的是initialize应用初始化这个函数

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

在这里插入图片描述直到走到init方法中,才算是进入了主题。

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

在这里插入图片描述来到这里之后需要简单的进行解读一下

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

并且这里有个configPath这个属性熟悉吧!这个值最终就是D:phpstudy_proWWWThinkPHPSourceCodeAnalysisconfig

在这里插入图片描述在接这就是把config目录下的文件全部拿出来。

传递给config类的load方法

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

  • scandir :以升序的方式返回一个目录下的所有文件,还有第二个参数1,表示降序的方式返回一个目录下的所有文件。
  • pathinfo:以数组的形式返回文件信息,分别为目录名、文件名、扩展名,其中的几个参数代码中有提到,可以看下图即可。
  • 在这段代码中有一个属性configExt,这个值是在环境变量读出来的,给的值是php

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

    一起来看看都经历了什么

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

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

    在这里插入图片描述来到loadFile这个文件后

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

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

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

    在这里插入图片描述在set方法中,这块代码就是核心了

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

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

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

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

    ?

    坚持学习、坚持写博、坚持分享是咔咔从业以来一直所秉持的信念。希望在偌大互联网中咔咔的文章能带给你一丝丝帮助。我是咔咔,下期见。

    ?

    热心网友 时间:2022-04-28 04:41

    config.php里一般是return array(key1=>value1,key2=>value2....)
    所以可以$config = include __ROOT__ .'/App/Home/Conf/config.php';

    打印一下$config,看看获取结果。追问是的,就是这样。打印没有任何东西。。。按理说我这个路径应该也没问题啊。。

    追答file_exists(),看下文件是否存在,不存在就是你路径问题

    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    在公交车上实施扒窃,会受到怎样的处罚? 交通违法行为识别 公交车扒窃会如何处罚? 郑州鱼缸清洗找哪家公司做得比较好? 郑州有没有专业维修鱼缸,清洗鱼缸的? ...的鱼缸,放在办公室养些鱼水草之类的。郑州哪里有卖这样的鱼缸。_百... 我们公司想要定做个观赏鱼缸,不知道郑州哪家公司最专业? 谁知道郑州生态鱼缸定做哪家做的效果最好? 联想电脑启用无线功能的功能键? 笔记本电脑怎么连接网笔记本电脑怎样连接无线网 我感觉java中的"工厂模式"和MVC框架中的"Spring"设计原理很相似,不知道到底这么认为对不对?求助大神 c#中的工厂模式的好处 蘑菇车机开机为什么开机就出现发现工厂配置文件,请问是否导入 工厂模式的应用? java 抽象工厂模式 使用工厂模式对于设计软件有什么好处? 工厂模式为什么叫做工厂模式? 安卓手机开机后,总是显示 工厂模式(factory mode),无法进入正常手机界 求:asp.net 工厂模式类间引用顺序 我想知道工厂模式的详细解释 使用简单工厂模式的优点是什么? 手机开不开机,无法进入工厂模式怎么办 ASP.NET工厂模式的疑问 JAVA工厂模式修改其配置文件,而不需要修改代码即可连接不同的数据库,请问有案例吗? intellij yaml文件没有 如何查看创建pod的yaml文件 求c++解析yaml的学习资料 yaml使用需要什么python库 yaml格式有严格的的格式要求,在变量值和难搞之间有两个空格吗 微信怎么打开yaml文件 yaml是什么简写的? THINKPHP咋样生成文件,例如后台功能要生成配置文件等 thinkphp数据库怎么配置 ThinkPHP2.1核心包中配置文件convention.php 不起作用是怎么回事啊? thinkphp3.2.2怎么配置 thinkphp取出数组中的值 THINKPHP模板中如何判断一个数存在于一个数组中 ThinkPHP中返回一个数组该怎么使用? ThinkPHP中foreach和volist的区别 thinkphp如何查询某一条数据在所有查询到的数据中的排名位置? thinkphp 中数据库的值怎么读到checkbox thinkphp中关于sp_sql_posts函数的用法? thinkphp中的group方法怎么理解? thinkphp中有个队列缓存是什么意思?thinkphp中的缓存是怎么实现的?都有哪些缓存方式 thinkphp中数据库表使用前缀的好处 thinkPHP中的pathinfo模式是如何实现的? thinkphp 几个问题求助? thinkphp中Storage类有什么作用?为什么这么设计 thinkphp中的验证求解 thinkphp怎么整合redis,配置文件,类,谢谢! thinkphp onethink文件目录说明