## 発行コールバック

発行コールバックが起動するのは、登録済みのクラスのインスタンスが yaml_emit() や yaml_emit_file() から呼び出されたときです。 コールバックに渡されるのは、発行対象のオブジェクトです。 このコールバックは、二つの要素 "`tag`" および "`data`" を持つ配列を返す必要があります。 "`tag`" の値は文字列で、出力時の YAML タグとして用いられます。 "`data`" の値は YAML 形式にエンコードされ、 解析対象のオブジェクトの代わりに発行されます。

例1 Emit callback example

    <?php
    class 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
    ...
    "

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open