免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
學習PHP中YAML操作擴展的使用

學習PHP中YAML操作擴展的使用

YAML 這個東西,說實話,自己用得并不多。在學習自動化測試相關的內(nèi)容時候,接觸過使用這種配置文件來配置 Travis CI 的持續(xù)集成操作,當然,當時也是以學習性質(zhì)為主的。雖說接觸得不多,但也知道確實這種配置格式的寫法基本上已經(jīng)成為了現(xiàn)在的主流。所以關于具體的 YAML 相關的內(nèi)容在這里就不多做解釋了,還不是太了解的同學可以自行查閱一些相關的文檔。

我們今天來學習的主要是一個 PHP 中用來解析和轉(zhuǎn)換 YAML 格式的擴展,安裝過程并沒有什么特別的可以說明的地方,就和其它的擴展一樣進行安裝即可。不過這個擴展需要一個 libyaml-devel ,在 CentOS 中直接通過 yum 或者 dnf 是無法安裝的,我們可以在文末的鏈接中找到下載地址。

將 PHP 數(shù)據(jù)轉(zhuǎn)換成 YAML

對于將 PHP 的數(shù)據(jù)轉(zhuǎn)換成 YAML 來說,其實就和 JSON 相關的操作差不多,將數(shù)組轉(zhuǎn)換成 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() 函數(shù)轉(zhuǎn)換的結果是非常標準的 YAML 格式。開頭有 --- ,結尾有 ... 。但你會發(fā)現(xiàn)有很多教程或者框架中的 .yml 文件中是沒有這些符號的,從官方文檔中得知這些符號是建議寫得,而我們的擴展則是非常地遵守建議,也就是轉(zhuǎn)換的結果非常地標準。

此外,在測試代碼中我們加入了中文的內(nèi)容??梢钥吹街苯愚D(zhuǎn)換的時候中文被編碼了。就像 JSON 操作一樣,在 YAML 這個擴展的函數(shù)中,我們也可以指定編碼格式讓中文原樣顯示。

var_dump(yaml_emit($invoice, YAML_UTF8_ENCODING));
// string(616) "---
// ………………
//   description: 籃球
// ………………
// ...
// "

將 YAML 轉(zhuǎn)為 PHP 數(shù)組

沒錯,也是類似于 JSON 操作的,將 YAML 格式的字符串格式內(nèi)容反轉(zhuǎn)回 PHP 數(shù)據(jù)內(nèi)容。

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() 函數(shù)。除了直接操作字符串之外,我們還可以直接提取文件內(nèi)容來進行轉(zhuǎn)換,包括上面的 yaml_emit() 函數(shù)也是有類似的直接將結果寫入到文件中的。

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 擴展,似乎在框架中本身就有解決讀取轉(zhuǎn)換這種 YAML 格式的工具,這個我們最后再說。和 yaml_parse_file() 類似地,yaml_emit_file() 是直接將 PHP 數(shù)據(jù)轉(zhuǎn)換為 YAML 格式之后直接寫入到一個文件中,大家可以自己測試一下。

回調(diào)函數(shù)處理標簽

不管是 yaml_emit() 還是 yaml_parse() 都是支持一個回調(diào)參數(shù)操作的。我們先來看看例子。

// 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 中的一種標簽格式的寫法。而這個回調(diào)的作用就是在遇到類似的這類標簽的時候,使用什么回調(diào)函數(shù)來進行處理。比如我們的原文檔中的 !laravel 后面的內(nèi)容是 laravel 。在回調(diào)函數(shù)中我們將內(nèi)容替換成了 new version laravel8 ,于是,最后輸出的結果就是 preset 字段的內(nèi)容變成了 new version laravel8 。當然,更加詳細的內(nèi)容以及更多地語法還是需要我們深入地了解 YAML 格式的語法才能夠更加清楚,所以這里也就不多說了,畢竟自己也接觸得不多。

總結

對于這個擴展的內(nèi)容不多,而且即使是真實的業(yè)務環(huán)境中需要操作 YAML 格式的配置文件的話估計我也不會用它。為什么呢?當然是因為 Composer 里面已經(jīng)有很多處理 YAML 的組件可以供我們使用啦。完全不需要通過擴展編譯安裝的方式來對服務器上的 PHP 環(huán)境進行改變。如果是自己使用的話,在 packagist.org 中能找到很多組件,而如果是使用 Laravel 的話,它的底層使用的其實是 symfony 框架中 yaml 處理組件。直接使用 composer require symfony/yaml 就可以為自己的小項目添加這個組件咯。具體內(nèi)容可以參考這個文檔:

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/

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
PHP擴展編寫第二步:參數(shù),數(shù)組,以及ZVAL
PHP錯誤處理的函數(shù)和相關信息
PHP中讀取文件的幾個方法
PHP各種形式的函數(shù)以及應用
Laravel框架表單驗證詳解
php通過pack和unpack函數(shù)實現(xiàn)對二進制數(shù)據(jù)封裝及解析
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服