De acuerdo con la official documentation, hay una manera de proporcionar devoluciones de llamada para las etiquetas personalizadas YAML:¿Cómo utilizar las devoluciones de etiquetas personalizadas de PHP-YAML?
mixed yaml_parse (string $input [, int $pos = 0 [, int &$ndocs [, array $callbacks ]]])
devoluciones de llamada
controladores de contenido para los nodos YAML. Matriz asociativa de etiquetas YAML => asignaciones de devolución de llamada.
Sin embargo, parece que no hay otra documentación sobre el tema, ¡incluso en la fuente de extensión!
he creado este script como una prueba:
<?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';
}
)));
y me dieron este resultado:
$ 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
)
Desde que yo puedo decir varias cosas:
- La clave utilizadas en la búsqueda de devolución de llamada es una de PHP-YAML predefined constants o la etiqueta personalizada utilizada en la fuente YAML, incluido el signo de admiración
- Cada valor de la clave y en un mapa se "etiqueta" y se pasa a la devolución de llamada coincidente, probablemente porque según la especificación YAML, la clave también puede ser válida.
- Tres argumentos se pasan a la devolución de llamada: el "asunto" de la etiqueta, la propia etiqueta y algún número, probablemente correspondiente a una constante
YAML_*_SCALAR_STYLE
. - El valor de retorno de devoluciones de llamada sustituye a la estructura de datos de etiquetado
Alguien puede confirmar el comportamiento esperado de esta función?