Публикующие callback-функции вызываются тогда, когда с помощью
yaml_emit() или yaml_emit_file()
публикуются экземпляры зарегистрированных классов . В функцию
передаётся публикуемый объект. Callback-функция должна вернуть массив с двумя ключами:
"tag
" и "data
".
Значение, связанное с ключом "tag
" должно быть
строкой, содержащей тег YAML для вывода. Значение, связанное с ключом
"data
" должно быть закодировано как YAML
и опубликовано вместо перехваченного объекта.
Пример #1 Пример публикующей callback-функции
<?php
class EmitExample {
public $data; // данные должны быть понятного pecl/yaml типа
public function __construct ($d) {
$this->data = $d;
}
/**
* Публикующая callback-функция Yaml.
*
* Ожидается возвращение массива с двумя значениями 2:
* - 'tag': пользовательский тег для этой сериализации
* - 'data': значение для преобразование в yaml (массив, строка, логическое, число)
*
* @param object $obj Публикуемый объект
* @return array Тег и замещающие данные для публикации
*/
public static function yamlEmit (EmitExample $obj) {
return array(
'tag' => '!example/emit',
'data' => $obj->data,
);
}
}
$emit_callbacks = array(
'EmitExample' => array('EmitExample', 'yamlEmit')
);
$t = new EmitExample(array('a','b','c'));
$yaml = yaml_emit(
array(
'example' => $t,
),
YAML_ANY_ENCODING,
YAML_ANY_BREAK,
$emit_callbacks
);
var_dump($yaml);
?>
Вывод приведённого примера будет похож на:
string(43) "--- example: !example/emit - a - b - c ... "