当注册类的实例被 yaml_emit() 或 yaml_emit_file() 发射时,就会调用发射回调函数。回调函数会传递要发射的对象。回调函数必须返回一个包含两个键的数组:“tag
” 和 “data
”。与 “tag
” 键关联的值必须是字符串,用作输出中的 YAML 标记。与 “data
” 键关联的值将被编码为 YAML,并代替被拦截的对象发射。
示例 #1 发射回调函数示例
<?php
class EmitExample {
public $data; // data 可以是任何 pecl/yaml 支持的类型
public function __construct ($d) {
$this->data = $d;
}
/**
* Yaml 发射回调函数,通过类名在 yaml_emit 调用中引用。
*
* 预期返回一个包含 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 ... "