当 yaml_emit() 或 yaml_emit_file() 发出已注册类的实例时,将调用发出回调。回调将传递要发出的对象。回调必须返回一个具有两个键的数组:“tag
”和“data
”。与“tag
”键关联的值必须是将在输出中用作 YAML 标记的字符串。与“data
”键关联的值将被编码为 YAML 并发出以代替被拦截的对象。
示例 #1 发出回调示例
<?php
class EmitExample {
public $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 ... "