请注意,解析 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
function cb_yaml_date($value, $tag, $flags) {
return new DateTime($value);
}
$yaml = <<<YAML
event1:
name: My Event
date: !date 25.05.2001
YAML;
$ndocs = 0;
$data = yaml_parse($yaml, 0, $ndocs, array('!date' => 'cb_yaml_date'));
print_r($data);
?>
以上示例将输出类似于以下内容:
数组
(
[event1] => 数组
(
[name] => My Event
[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 的最大整数。