Php/docs/yaml.callbacks.emit

提供:Dev Guides
< Php
移動先:案内検索

発行コールバック

発行コールバックが起動するのは、登録済みのクラスのインスタンスが 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
...
"