共计 2851 个字符,预计需要花费 8 分钟才能阅读完成。
上篇文章咱们介绍了一个比拟闻名的 YAML 格局的配置文件相干的操作,明天我来学习另外一个配置文件扩大。这个配置文件的写法其实与 php.ini 的这种 PHP 规范的配置格局比拟相似,然而又有一些不同。不过内容非常简单,大家仅供参考。
Yaconf 配置文件及格局
Yaconf 从名字是不是看出什么端倪了?没错,和 Yaf、Yac 一样,又是咱们鸟哥的作品。不得不说大神还是为咱们奉献了很多很好的作品哦。前面咱们还会讲一个它的小众开源扩大,而 Yaf 扩大咱们将在将来学习框架的时候再深刻地进行学习。
Yaconf 的装置也是一般地扩大装置的形式,不过它须要 PHP7 以上的版本。另外,在装置之后还须要在 php.ini 文件中指定 yaconf.directory,也就是配置文件寄存的目录。这个属性是不能通过 ini_set() 配置的,也就是必须在程序运行前就载入到 PHP 运行环境中。咱们依照文档的阐明将它配置为 /tmp/conf,而后在这个目录下建设本人须要的配置文件就能够了。
Yaconf 的语法十分简洁,鸟哥的作品都主打性能,所以 Yaconf 也是一个高性能的配置管理扩大。对于 Yaconf 的具体介绍能够查看文章最下方第二条链接的阐明,在这里咱们就看一些它的语法以及具体的应用。
foo="bar"
phpversion=PHP_VERSION
env=${HOME}
arr.0=1
arr.1=2
arr[]=3
arr[3]=4
map.foo=bar
map.bar=foo
map.foo.name=yaconf
看进去什么特点了吗?首先,如果是带双引号的内容,会将这个配置变量当成字符串,如果不是双引号的,则会尝试以 PHP 来进行解析。而后数组和 HashMap 这样的写法也都是完满反对的。仿佛是比 php.ini 的写法强悍了一些。不过还不止。
[parent]
parent="base"
children="NULL"
[children : parent]
children="children"
嗯,你没看错,它还能够反对这样的继承写法,中括号标示的内容能够看作是一个配置片断,或者说一节内容,具体作用咱们前面会看到。
获取配置内容
配置语法就是这些,接下来咱们要具体看看这些配置信息要怎么读取进去。这个扩大其实就提供了两个函数,一个用于读取,一个用于查问配置是否存在,咱们先来看一下如何读取数据。
var_dump(Yaconf::get("test.foo")); // string(3) "bar"
var_dump(Yaconf::get("test.phpversion")); // string(5) "7.4.4"
var_dump(Yaconf::get("test.env")); // string(5) "/root"
这个函数置信不必多解释了,test 是咱们的文件名,也就是在 /tmp/conf/test.ini 这个文件中,咱们把下面的测试配置信息写在了这个配置外面。当然,咱们也能够在这个目录中定义更多的配置文件,比方咱们另外定义了一个配置文件 foo.ini,那么就能够这么读取:
var_dump(Yaconf::get("foo.SectionA.key")); // string(3) "val"
对于数组配置信息来说,间接获取到的内容返回的就是数组格局的。
var_dump(Yaconf::get("test.arr"));
// array(4) {// [0]=>
// string(1) "1"
// [1]=>
// string(1) "2"
// [2]=>
// string(1) "3"
// [3]=>
// string(1) "4"
// }
var_dump(Yaconf::get("test.arr.1")); // string(1) "2"
var_dump(Yaconf::get("test.map"));
// array(2) {// ["foo"]=>
// array(1) {// ["name"]=>
// string(6) "yaconf"
// }
// ["bar"]=>
// string(3) "foo"
// }
var_dump(Yaconf::get("test.map.foo.name")); // string(6) "yaconf"
在获取数组外部的数据时,咱们间接应用 . 来获取序列的内容就能够了。最初就是下面提到过的分片和继承的性能。
var_dump(Yaconf::get("test.parent.parent")); // string(4) "base"
var_dump(Yaconf::get("test.children.parent")); // string(4) "base"
var_dump(Yaconf::get("test.parent.children")); // string(4) "NULL"
var_dump(Yaconf::get("test.children.children")); // string(8) "children"
test 是文件名,而 parent 就是咱们定义在中括号外面的分片名称,接着持续点分片上面定义的配置项的名称就能够获取到这个分片上面的配置信息内容了。而继承的应用置信从代码中大家也看进去了,parent 的 parent 配置项被 children 继承后,children 中不须要再定义这个配置项就能够间接获取到父级中定义过的这个配置项内容。而 children 中重写了 children 这个配置项,所以在 children 分片中的 children 配置项显示的就是它本人定义的内容。
检测配置信息是否存在
后面说过这个扩大中一共就两个办法,第二个就是用于检测配置项是否存在的一个办法,非常简单。
var_dump(Yaconf::has("test.foo")); // bool(true)
var_dump(Yaconf::has("test.baz")); // bool(false)
总结
说实话,这个配置扩大也并不是十分常见的一个扩大利用。因为大家目前在应用的框架不论是 Laravel 还是 TP 都会有它们本人的一套配置文件格式及操作。当然,如果说你是鸟哥的忠粉或者自身公司零碎是架构在 Yaf、Yac、Yar 之上的话,那么加上这个 Yaconf 的话就能够看作是一整套残缺的高性能外部扩大架构。它们主打的特点都是性能强悍,毕竟是从底层 C 扩大的角度来提供的框架,而不是通过 Composer 来应用 PHP 编写的框架。这个咱们未来在学习和解说框架的时候说不定会拿进去独自做一个系列哦!
测试代码:
https://github.com/zhangyue0503/dev-blog/blob/master/php/2021/01/source/11. 一起理解 PHP 中 YaConf 扩大的应用.php
参考文档:
https://www.php.net/manual/zh/book.yaconf.php
https://www.laruence.com/2015/06/12/3051.html