В соответствии с официальной документацией существует способ предоставления обратных вызовов для пользовательских тегов YAML:
mixed yaml_parse ( string $input [, int $pos = 0 [, int &$ndocs [, array $callbacks ]]] )
обратных вызовов
Содержимоеобработчики для узлов YAML.Ассоциативный массив тегов YAML => сопоставлений обратного вызова.
Однако, похоже, нет другой документации по этому вопросу, даже в исходном коде расширения!
Я создал этот скрипт какtest:
<?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 , либо пользовательским тегом, используемым в источнике YAML, включая восклицательный знак
- Каждое значение ключа и в карте получает "tagged "и передается в соответствующий обратный вызов, возможно потому, что в соответствии со спецификацией YAML ключ также может быть любого допустимого типа.
- В обратный вызов передаются три аргумента:" субъект "тега, тегсамо по себе и некоторое число, вероятно, соответствующее константе
YAML_*_SCALAR_STYLE
. - Возвращаемое значение обратных вызовов заменяет тегированную структуру данных
Может ли кто-нибудь подтвердить ожидаемое поведение этой функции