発行コールバック
発行コールバックが起動するのは、登録済みのクラスのインスタンスが
yaml_emit() や
yaml_emit_file() から呼び出されたときです。
コールバックに渡されるのは、発行対象のオブジェクトです。
このコールバックは、二つの要素
"tag
" および "data
"
を持つ配列を返す必要があります。
"tag
" の値は文字列で、出力時の YAML タグとして用いられます。
"data
" の値は YAML 形式にエンコードされ、
解析対象のオブジェクトの代わりに発行されます。
例1 Emit callback example
<?phpclass EmitExample { public $data; // データは pecl/yaml で使える形式となります public function __construct ($d) { $this->data = $d; } /** * Yaml 発行コールバック関数。yaml_emit からクラス名で参照される * * 二つの要素を持つ配列を返す。 * - 'tag': このシリアライズ用のカスタムタグ * - 'data': yaml に変換する値 (array, string, bool, number) * * @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 ... "