## Публикующие callback-функции

Публикующие callback-функции вызываются тогда, когда с помощью yaml_emit() или yaml_emit_file() публикуются экземпляры зарегистрированных классов . В функцию передаётся публикуемый объект. Callback-функция должна вернуть массив с двумя ключами: "`tag`" и "`data`". Значение, связанное с ключом "`tag`" должно быть строкой, содержащей тег YAML для вывода. Значение, связанное с ключом "`data`" должно быть закодировано как YAML и опубликовано вместо перехваченного объекта.

Пример #1 Пример публикующей callback-функции

    <?php
    class EmitExample {
      public $data;    // данные должны быть понятного pecl/yaml типа

      public function __construct ($d) {
        $this->data = $d;
      }

      /**
       * Публикующая callback-функция Yaml.
       *
       * Ожидается возвращение массива с двумя значениями 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
    ...
    "

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