根据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
)
从那以后我可以说几件事:
YAML_*_SCALAR_STYLE
常量。任何人都可以确认此功能的预期行为吗?
答案 0 :(得分:4)
经过大量的研究和测试,我找到了一些答案。
如扩展名unit tests中所示,每个回调都有三个参数:
$data
- 已解析的已标记数据$tag
- 根据offical YAML tag specs展开的代码名称:
!custom
会扩展为!custom
!custom
扩展为prefixcustom
,其中prefix
由文档元数据%TAG ! prefix
定义。请注意不是一个领先的感叹号!!preset
扩展为解析器定义的内部类型。请参阅YAML_*_TAG
常量!<verbatim-tag> expands to
逐字-tag`。请注意,不是一个主要的感叹号。$style
- 使用的标量样式。请参阅YAML_*_SCALAR_STYLE
常量回调应返回一个混合值,供解析器发出。