【发布时间】:2011-09-22 08:23:54
【问题描述】:
根据official documentation,有一种方法可以为自定义YAML标签提供回调:
mixed yaml_parse ( string $input [, int $pos = 0 [, int &$ndocs [, array $callbacks ]]] )
回调
YAML 节点的内容处理程序。 YAML 标签的关联数组 => 回调映射。
但是,似乎没有关于该主题的其他文档,即使在扩展源中也是如此!
我创建了这个脚本作为测试:
<?php
$yaml =<<<YAML
---
prop: !custom val
YAML;
print_r(yaml_parse($yaml,0,$n,array(
YAML_STR_TAG => function () {
echo "YAML_STR_TAG\n";
$args = func_get_args();
print_r($args);
return 'x';
},
'!custom' => function () {
echo "!custom\n";
$args = func_get_args();
print_r($args);
return 'y';
}
)));
我得到了这个输出:
$ php yaml.php
YAML_STR_TAG
Array
(
[0] => prop
[1] => tag:yaml.org,2002:str
[2] => 1
)
!custom
Array
(
[0] => val
[1] => !custom
[2] => 1
)
Array
(
[x] => y
)
从中我可以说几件事:
- 回调查找中使用的键是 PHP-YAML 的 predefined constants 之一或 YAML 源中使用的自定义标记,包括感叹号
- 映射中的每个键 和 值都被“标记”并传递给匹配的回调,这可能是因为根据 YAML 规范,键也可以是任何有效类型。
- 三个参数传递给回调:标签的“主题”、标签本身和一些数字,可能对应于
YAML_*_SCALAR_STYLE常量。 - 回调的返回值替换了标记的数据结构
谁能确认这个函数的预期行为?
【问题讨论】: