一起了解PHP中YaConf扩展的使用(php扩展名有哪些)
ccwgpt 2024-10-26 08:32 46 浏览 0 评论
上篇文章我们介绍了一个比较出名的 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
相关推荐
- 一个基于.Net Core遵循Clean Architecture原则开源架构
-
今天给大家推荐一个遵循CleanArchitecture原则开源架构。项目简介这是基于Asp.netCore6开发的,遵循CleanArchitecture原则,可以高效、快速地构建基于Ra...
- AI写代码翻车无数次,我发现只要提前做好这3步,bug立减80%
-
写十万行全是bug之后终于找到方法了开发"提示词管理助手"新版本那会儿,我差点被bug整崩溃。刚开始两周,全靠AI改代码架构,结果十万行程序漏洞百出。本来以为AI说没问题就稳了,结果...
- OneCode低代码平台的事件驱动设计:架构解析与实践
-
引言:低代码平台的事件驱动范式在现代软件开发中,事件驱动架构(EDA)已成为构建灵活、松耦合系统的核心范式。OneCode低代码平台通过创新性的注解驱动设计,将事件驱动理念深度融入平台架构,实现了业务...
- 国内大厂AI插件评测:根据UI图生成Vue前端代码
-
在IDEA中安装大厂的AI插件,打开ruoyi增强项目:yudao-ui-admin-vue31.CodeBuddy插件登录腾讯的CodeBuddy后,大模型选择deepseek-v3,输入提示语:...
- AI+低代码技术揭秘(二):核心架构
-
本文档介绍了为VTJ低代码平台提供支持的基本架构组件,包括Engine编排层、Provider服务系统、数据模型和代码生成管道。有关UI组件库和widget系统的信息,请参阅UI...
- GitDiagram用AI把代码库变成可视化架构图
-
这是一个名为gitdiagram的开源工具,可将GitHub仓库实时转换为交互式架构图,帮助开发者快速理解代码结构。核心功能一键可视化:替换GitHubURL中的"hub...
- 30天自制操作系统:第六天:代码架构整理与中断处理
-
1.拆开bootpack.c文件。根据设计模式将对应的功能封装成独立的文件。2.初始化pic:pic(可编程中断控制器):在设计上,cpu单独只能处理一个中断。而pic是将8个中断信号集合成一个中断...
- AI写代码越帮越忙?2025年研究揭露惊人真相
-
近年来,AI工具如雨后春笋般涌现,许多人开始幻想程序员的未来就是“对着AI说几句话”,就能轻松写出完美的代码。然而,2025年的一项最新研究却颠覆了这一期待,揭示了一个令人意外的结果。研究邀请了16位...
- 一键理解开源项目:两个自动生成GitHub代码架构图与说明书工具
-
一、GitDiagram可以一键生成github代码仓库的架构图如果想要可视化github开源项目:https://github.com/luler/reflex_ai_fast,也可以直接把域名替换...
- 5分钟掌握 c# 网络通讯架构及代码示例
-
以下是C#网络通讯架构的核心要点及代码示例,按协议类型分类整理:一、TCP协议(可靠连接)1.同步通信//服务器端usingSystem.Net.Sockets;usingTcpListene...
- 从复杂到优雅:用建造者和责任链重塑代码架构
-
引用设计模式是软件开发中的重要工具,它为解决常见问题提供了标准化的解决方案,提高了代码的可维护性和可扩展性,提升了开发效率,促进了团队协作,提高了软件质量,并帮助开发者更好地适应需求变化。通过学习和应...
- 低代码开发当道,我还需要学习LangChain这些框架吗?| IT杂谈
-
专注LLM深度应用,关注我不迷路前两天有位兄弟问了个问题:当然我很能理解这位朋友的担忧:期望效率最大化,时间用在刀刃上,“不要重新发明轮子”嘛。铺天盖地的AI信息轰炸与概念炒作,很容易让人浮躁与迷茫。...
- 框架设计并不是简单粗暴地写代码,而是要先弄清逻辑
-
3.框架设计3.框架设计本节我们要开发一个UI框架,底层以白鹭引擎为例。框架设计的第一步并不是直接撸代码,而是先想清楚设计思想,抽象。一个一个的UI窗口是独立的吗?不是的,...
- 大佬用 Avalonia 框架开发的 C# 代码 IDE
-
AvalonStudioAvalonStudio是一个开源的跨平台的开发编辑器(IDE),AvalonStudio的目标是成为一个功能齐全,并且可以让开发者快速使用的IDE,提高开发的生产力。A...
- 轻量级框架Lagent 仅需20行代码即可构建自己的智能代理
-
站长之家(ChinaZ.com)8月30日消息:Lagent是一个专注于基于LLM模型的代理开发的轻量级框架。它的设计旨在简化和提高这种模型下代理的开发效率。LLM模型是一种强大的工具,可以...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- 框架图 (58)
- flask框架 (53)
- quartz框架 (51)
- abp框架 (47)
- springmvc框架 (49)
- 分布式事务框架 (65)
- scrapy框架 (56)
- shiro框架 (61)
- 定时任务框架 (56)
- java日志框架 (61)
- mfc框架 (52)
- abb框架断路器 (48)
- beego框架 (52)
- java框架spring (58)
- grpc框架 (65)
- tornado框架 (48)
- 前端框架bootstrap (54)
- orm框架有哪些 (51)
- 知识框架图 (52)
- ppt框架 (55)
- 框架图模板 (59)
- 内联框架 (52)
- cad怎么画框架 (58)
- ssm框架实现登录注册 (49)
- oracle字符串长度 (48)