• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Tp5框架源码分析第二步配置文件详解

php 搞代码 3年前 (2022-02-28) 19次浏览 已收录 0个评论
文章目录[隐藏]

配置文件品种

1.常规配置 外围框架内置的配置文件(thinkphp/convention.php),无需更改
2.利用配置 每个利用的全局配置文件(我的项目根目录下的config目录下的文件).
3.模块配置 (1)每个模块的配置文件(雷同的配置参数会笼罩利用配置),有局部配置参数模块 是有效的,因为已(2)比方index模块=》 index/config/database.php
4.动静配置 次要指在控制器或行为中进行(动静)更改配置,该配置形式只在当次申请无效,因 为不会保留到配置中去。这种配置倡议少用。
其中模块配置优先级高于利用配置。

PHP底层ArrayAccess类巧用剖析

offsetExists 查看偏移地位是否存在
offsetGet 获取一个偏移地位的值
offsetSet 设置一个偏移地位的值
offsetUnset 删除一个偏移地位的值
当咱们应用ArrayAccess的时候咱们必须去实现以上四个办法。
接下来咱们来简略实战一下:
首先咱们再extend目录下创立一个ObjArray的类文件,而后咱们让这个类实现ArrayAccess接口。然而当咱们实现这个接口的时候,咱们就要把下面四个办法都要去实现了,不然是无奈实现这个接口的。

而后咱们在index.php控制器里进行调用,构建一个obj办法,而后在外面调用ObjArray类,当咱们间接打印title的key的时候,你会发现它执行的是offsetGet办法,因为在ObjArray外面曾经定义了title的值。当从新定义一个属性之后,会先执行offsetSet办法,而后执行offsetGet办法,这是须要先在ObjArray中先创立一个属性,而后再获取到这个属性。

Config外围类库

1.加载配置文件:load()—-loadFile():(1)php yaml格式文件解决 (2)parse解决,又分为不同的文件类型:ini json xml 和设计模式—-工厂模式 (3)set
2.set
3.get
4.ArrayAccess:offsetExists offsetGet offsetSet offsetUnset
config外面有很多属性和办法,这里就不一一介绍了,能够关上config文件去看一下。咱们接下来从加载配置文件load()说,那什么时候会执行load办法呢,让我一一阐明。
在入口文件外面执行的是run()办法,而后在run办法外面会进行初始化init(),在init中,它会加载初始化文件、行为扩大文件、公共文件、中间件,注册服务的容器对象实例和读取配置文件,在读取配置文件的时候,就会调用load()。

load办法中的$file是传入的文件,$name是文件的前缀。
A:判断$file是否是文件,如果是文件,把它赋值给$filename,如果不是,执行B。
B:把$file加上前缀和后缀,而后判断是否是文件,而后赋值给$filename.
C:判断文件$filename是否存在,存在的话,调用LoadFile();
D:如果$filename不存在,进行判断yaconf配置是否存在此文件,而后创立这个文件。
LoadFile($filename,$name)办法

首先转换大小写,而后提取文件后缀,接着进行判断是不是php文件,如果是的话,加载$file文件,而后返回set函数,include $file返回的是一个数组。
如果不是php文件,判断是不是yaml文件和yaml_parse_file办法是否存在,而后返回set函数,同样yaml_parse_file返回的也是一个数组。
对于yaml和set函数,在前面我会具体解说。
如果yaml和php都不反对的话,就会走到parse,这个在下面加载配置文件的中央有解释。
parse()

parse办法的逻辑是这样的,首先判断$type是不是空,如果是空的话,把$config的后缀赋值给$type。而后执行Loader中的factory办法,这是一个工厂模式,它传入的命名空间是think\config\driver,那么它会定位到thinkpgp\library\think\config\driver目录下,它就对应到ini、json和xml文件。
而后咱们看factory办法

A:进行的是一个三元运算,如果$name存在\\,就返回$name,否则就把$name进行首字母大写解决后增加namespace前面。最终返回的是think\config\driver\Ini;
B:判断$name 的类是否存在,如果不存在抛出异样,也就是C,如果存在进入Container容器进行解决,调用incoleClass办法。最终返回的是类的实例。
接下来咱们要解说一下set,在讲set之前,咱们说一下Ini。

它这里是对配置文件进行解决,最初返回的是一个数组,配置信息的数组。
set()

set办法传入的是一个数组$name,所以就不进行第一步操作,间接进行第二步,判断是否是数组。
而后判断$value是否是空,它传入的是文件,而后执行下一步,判断config[$value]是否是空,当执行第一次的时候,它是空的。
而后把$name赋值给$value,而后把它填入到config[$value]中去。

当config[value]存在的时候,就把config中和$name反复的去掉,而后赋值给$result,放到内存里。
get()办法详解

首先判断$name是不是空,或者$name是不是带”.”符号,而后把$this->prefix用”.”把$name连接起来赋值给$name。$this->prefix的值是App就相当于$name = App.xxx。
接下来判断$name是不是空的,如果是空的就返回在set()办法里存入内存的config。
而后判断$name是不是App.,如果是的话,就把前面低点去掉,而后把app传到pull办法外面。
pull()办法

首先把$name转化为小写,而后判断有没有yaconf,有的话就进行getYaconfName解决$name,而后判断Yaconf中是否存在$yaconfName,存在就进行get解决后赋值给$config,最初进行三元运算,判断是否存在config[$name],存在就把它和$config去重合并,不存在就返回$config,而后判断返回的是否存在。最初返回判断$this->config[$name]是否存在的运算。

在get办法前面的逻辑,如果下面的逻辑不走的话,$name传入是cache,那么此时$name为APP.cache。判断yaconf是否存在,存在就返回Yaconf数据,而后判断$yaconfName是否存在,如果存在就返回Yaconf的配置。最初对$name分隔变成数组,把$name[0]转化为小写。而后把$this->config赋值给$config。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Tp5框架源码分析第二步配置文件详解
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址