YAML 데이터 직렬화 Emit callbacks

yaml_emit() 또는 yaml_emit_file()에 의해 등록된 클래스의 인스턴스가 방출될 때 방출 콜백이 호출됩니다. 콜백은 내보낼 개체를 전달합니다. 콜백은 "tag"와 "data"라는 두 개의 키가 있는 배열을 반환해야 합니다. "tag" 키와 연결된 값은 출력에서 ​​YAML 태그로 사용할 문자열이어야 합니다. "data" 키와 연결된 값은 YAML로 인코딩되고 가로채는 개체 대신 내보내집니다.

예제 #1 Emit callback example

                  
<?php
class EmitExample {
  public $data;    // data may be in any pecl/yaml suitable type

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

  /**
   * Yaml emit callback function, referred on yaml_emit call by class name.
   *
   * Expected to return an array with 2 values:
   *   - 'tag': custom tag for this serialization
   *   - 'data': value to convert to yaml (array, string, bool, number)
   *
   * @param object $obj Object to be emitted
   * @return array Tag and surrogate data to emit
   */
  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
...
"