请注意,在解析 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 的最大整数。