PHP Conference Japan 2024

发射回调函数

当注册类的实例被 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
...
"
添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top