請注意,解析 yaml 時,未加引號的 Y 值將會變成布林值 true
根據上下文,這可能是想要的或不想要的行為
- chr_name: X // 變為字串 X
- chr_name: Y // 變為布林值 true
[
[chr_name => X],
[chr_name => true],
]
你肯定不希望 Y 染色體變成 1 號染色體 (true),就像我遇到的情況一樣,所以請注意!
(PECL yaml >= 0.4.0)
yaml_parse_file — 從檔案剖析 YAML 資料流
將從檔案讀取的全部或部分 YAML 文件串流轉換為 PHP 變數。
如果針對使用 !php/object
標籤的節點啟用了 unserialize(),則使用 yaml_parse_file() 處理不受信任的使用者輸入是很危險的。可以使用 yaml.decode_php
ini 設定來停用此行為。
請注意,解析 yaml 時,未加引號的 Y 值將會變成布林值 true
根據上下文,這可能是想要的或不想要的行為
- chr_name: X // 變為字串 X
- chr_name: Y // 變為布林值 true
[
[chr_name => X],
[chr_name => true],
]
你肯定不希望 Y 染色體變成 1 號染色體 (true),就像我遇到的情況一樣,所以請注意!
正如 Jesse Donat 提到的,類型將會自動推斷。要強制使用某些類型,您可以像這樣使用回呼功能
<?php
函式 cb_yaml_date($value, $tag, $flags) {
return new DateTime($value);
}
$yaml = <<<YAML
event1:
name: 我的活動
date: !date 25.05.2001
YAML;
$ndocs = 0;
$data = yaml_parse($yaml, 0, $ndocs, array('!date' => 'cb_yaml_date'));
print_r($data);
?>
以上範例會輸出類似以下的內容:
陣列
(
[event1] => 陣列
(
[name] => 我的活動
[date] => DateTime 物件
(
[date] => 2001-05-25 00:00:00
[timezone_type] => 3
[timezone] => Europe/Berlin
)
)
)
順帶一提,如果您需要使用大數字,您可能需要使用 BC Math。因此,您只需將數字用引號括起來即可:
<?php
$yaml = <<<YAML
largenumber: '14695760472279668267313200104308'
YAML;
?>
這完全取決於類型檢測 - 據我所知,沒有辦法強制指定類型,例如,當您有一個非常長的整數作為值時 - 在我的例子中是 1313035348823,它會被限制為 2147483647 - PHP 的最大整數值。