首页 » Web前端 » phpyaml技巧_进修PHP中YAML操作扩展的运用

phpyaml技巧_进修PHP中YAML操作扩展的运用

访客 2024-10-23 0

扫一扫用手机浏览

文章目录 [+]

我们本日来学习的紧张是一个 PHP 中用来解析和转换 YAML 格式的扩展,安装过程并没有什么特殊的可以解释的地方,就和其它的扩展一样进行安装即可。
不过这个扩展须要一个 libyaml-devel ,在 CentOS 中直接通过 yum 或者 dnf 是无法安装的,我们可以在文末的链接中找到下载地址。

将 PHP 数据转换成 YAML

对付将 PHP 的数据转换成 YAML 来说,实在就和 JSON 干系的操作差不多,将数组转换成 YAML 格式的字符串。

phpyaml技巧_进修PHP中YAML操作扩展的运用

$addr = array( "given" => "Chris", "family"=> "Dumars", "address"=> array( "lines"=> "458 Walkman Dr. Suite #292", "city"=> "Royal Oak", "state"=> "MI", "postal"=> 48046, ), );$invoice = array ( "invoice"=> 34843, "date"=> 980208000, "bill-to"=> $addr, "ship-to"=> $addr, "product"=> array( array( "sku"=> "BL394D", "quantity"=> 4, "description"=> "篮球", "price"=> 450, ), array( "sku"=> "BL4438H", "quantity"=> 1, "description"=> "Super Hoop", "price"=> 2392, ), ), "tax"=> 251.42, "total"=> 4443.52, "comments"=> "Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338.", );$yamlString = yaml_emit($invoice);var_dump($yamlString);// string(624) "---// invoice: 34843// date: 980208000// bill-to:// given: Chris// family: Dumars// address:// lines: |-// 458 Walkman Dr.// Suite #292// city: Royal Oak// state: MI// postal: 48046// ship-to:// given: Chris// family: Dumars// address:// lines: |-// 458 Walkman Dr.// Suite #292// city: Royal Oak// state: MI// postal: 48046// product:// - sku: BL394D// quantity: 4// description: "\u7BEE\u7403"// price: 450// - sku: BL4438H// quantity: 1// description: Super Hoop// price: 2392// tax: 251.42// total: 4443.52// comments: Late afternoon is best. Backup contact is Nancy Billsmer @ 338-4338.// ...// "

可以看到 yaml_emit() 函数转换的结果是非常标准的 YAML 格式。
开头有 --- ,结尾有 ... 。
但你会创造有很多教程或者框架中的 .yml 文件中是没有这些符号的,从官方文档中得知这些符号是建议写得,而我们的扩展则是非常地遵守建议,也便是转换的结果非常地标准。

phpyaml技巧_进修PHP中YAML操作扩展的运用
(图片来自网络侵删)

此外,在测试代码中我们加入了中文的内容。
可以看到直接转换的时候中文被编码了。
就像 JSON 操作一样,在 YAML 这个扩展的函数中,我们也可以指定编码格式让中文原样显示。

var_dump(yaml_emit($invoice, YAML_UTF8_ENCODING));// string(616) "---// ………………// description: 篮球// ………………// ...// "将 YAML 转为 PHP 数组

没错,也是类似于 JSON 操作的,将 YAML 格式的字符串格式内容反转回 PHP 数据内容。

var_dump(yaml_parse($yamlString));// array(8) {// ["invoice"]=>// int(34843)// ["date"]=>// int(980208000)// ["bill-to"]=>// array(3) {// ["given"]=>// string(5) "Chris"// ["family"]=>// string(6) "Dumars"// ………………// ………………

同样非常大略地一个 yaml_parse() 函数。
除了直接操作字符串之外,我们还可以直接提取文件内容来进行转换,包括上面的 yaml_emit() 函数也是有类似的直接将结果写入到文件中的。

var_dump(yaml_parse_file('styleci.yml'));// array(3) {// ["php"]=>// array(3) {// ["preset"]=>// string(7) "laravel"// ["disabled"]=>// array(1) {// [0]=>// string(10) "unused_use"// }// ["finder"]=>// array(1) {// ["not-name"]=>// array(2) {// [0]=>// string(9) "index.php"// [1]=>// string(10) "server.php"// }// }// }// ["js"]=>// array(1) {// ["finder"]=>// array(1) {// ["not-name"]=>// array(1) {// [0]=>// string(14) "webpack.mix.js"// }// }// }// ["css"]=>// bool(true)// }

我们测试的这个文件便是 Laravel 中自带的那个 .styleci.yml 文件。
在 Laravel 框架中并没有哀求我们安装这个 YAML 扩展,彷佛在框架中本身就有办理读取转换这种 YAML 格式的工具,这个我们末了再说。
和 yaml_parse_file() 类似地,yaml_emit_file() 是直接将 PHP 数据转换为 YAML 格式之后直接写入到一个文件中,大家可以自己测试一下。

回调函数处理标签

不管是 yaml_emit() 还是 yaml_parse() 都是支持一个回调参数操作的。
我们先来看看例子。

// php:// preset: !laravel laravel// disabled:// ………………// ………………function callback($value){ return str_replace('laravel', 'new version laravel8', $value);}$ndocs = 0;var_dump(yaml_parse_file('styleci.yml', 0, $ndocs, ['!laravel'=>'callback']));// array(3) {// ["php"]=>// array(3) {// ["preset"]=>// string(20) "new version laravel8"// ["disabled"]=>// array(1) {// ……………………// ……………………

这是什么意思呢?!laravel 这种写法可以看做是 YAML 中的一种标签格式的写法。
而这个回调的浸染便是在碰着类似的这类标签的时候,利用什么回调函数来进行处理。
比如我们的原文档中的 !laravel 后面的内容是 laravel 。
在回调函数中我们将内容更换成了 new version laravel8 ,于是,末了输出的结果便是 preset 字段的内容变成了 new version laravel8 。
当然,更加详细的内容以及更多地语法还是须要我们深入地理解 YAML 格式的语法才能够更加清楚,以是这里也就不多说了,毕竟自己也打仗得不多。

总结

对付这个扩展的内容不多,而且纵然是真实的业务环境中须要操作 YAML 格式的配置文件的话估计我也不会用它。
为什么呢?当然是由于 Composer 里面已经有很多处理 YAML 的组件可以供我们利用啦。
完备不须要通过扩展编译安装的办法来对做事器上的 PHP 环境进行改变。
如果是自己利用的话,在 packagist.org 中能找到很多组件,而如果是利用 Laravel 的话,它的底层利用的实在是 symfony 框架中 yaml 处理组件。
直策应用 composer require symfony/yaml 就可以为自己的小项目添加这个组件咯。
详细内容可以参考这个文档:

https://symfony.com/doc/current/components/yaml.html

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/2021/01/source/10.学习PHP中YAML操作扩展的利用.php

参考文档:

https://www.php.net/manual/zh/book.yaml.php

http://www.rpmfind.net/linux/rpm2html/search.php?query=libyaml-devel(x86-64)

http://bd808.com/pecl-file_formats-yaml/

标签:

相关文章

今日头条算法如何实现个化推荐与精准传播

信息传播方式发生了翻天覆地的变化。今日头条作为国内领先的信息分发平台,凭借其强大的算法推荐系统,吸引了海量用户。今日头条的算法究竟...

Web前端 2025-01-31 阅读1 评论0

今日头条算法关闭之谜内容分发新格局

今日头条作为一款备受瞩目的新闻资讯平台,凭借其独特的算法推荐机制,吸引了大量用户。近期有关今日头条算法关闭的消息引发了广泛关注。本...

Web前端 2025-01-31 阅读1 评论0

今日头条算法智能推荐背后的科技魅力

信息爆炸的时代已经到来。人们每天在互联网上接触到海量的信息,如何从中筛选出有价值的内容,成为了人们关注的焦点。今日头条作为一款智能...

Web前端 2025-01-31 阅读1 评论0

今日头条算法专利申请个化推荐的秘密武器

信息爆炸的时代已经来临。在众多信息中,如何快速找到自己感兴趣的内容成为了一个难题。今日头条作为中国领先的资讯平台,凭借其独特的算法...

Web前端 2025-01-31 阅读1 评论0

今日头条算法机器推荐模式的秘密与挑战

大数据、人工智能等新兴技术的应用已经渗透到我们生活的方方面面。在信息爆炸的时代,人们获取信息的渠道越来越丰富,如何在海量信息中找到...

Web前端 2025-01-31 阅读1 评论0