Как использовать обратные вызовы пользовательских тегов PHP-YAML?

Согласно официальной документации , есть способ предоставить обратные вызовы для пользовательских тегов YAML:

mixed yaml_parse ( string $input [, int $pos = 0 [, int &$ndocs [, array $callbacks ]]] )

callbacks
Обработчики содержимого для узлов YAML. Ассоциативный массив тегов YAML => сопоставления обратного вызова.

Однако, похоже, нет другой документации по этому вопросу, даже в исходном коде расширения!

Я создал этот сценарий в качестве теста:

 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, включая восклицательный знак
  • Каждое значение ключа и на карте «помечается» и передается соответствующему обратному вызову, вероятно потому, что согласно спецификации YAML ключ может быть любого допустимого типа.
  • Три аргументы передаются в функцию обратного вызова: «тема» тега, сам тег и некоторое число, вероятно, соответствующее константе YAML _ * _ SCALAR_STYLE .
  • Возвращаемое значение обратного вызова заменяет данные с тегами структура

Может ли кто-нибудь подтвердить ожидаемое поведение этой функции?

5
задан Austin Hyde 27 June 2011 в 17:50
поделиться