IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 一起了解PHP中YaConf扩展的使用 -> 正文阅读

[PHP知识库]一起了解PHP中YaConf扩展的使用

一起了解PHP中YaConf扩展的使用

上篇文章我们介绍了一个比较出名的 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

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-11-20 18:11:18  更:2021-11-20 18:11:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 13:30:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计