2024 年 PHP 日本研討會

發出回呼

當已註冊類別的實例被 yaml_emit()yaml_emit_file() 輸出時,會呼叫 Emit 回呼函式。該回呼函式會接收要輸出的物件。回呼函式必須返回一個具有兩個鍵的陣列:「tag」和「data」。與「tag」鍵關聯的值必須是一個字串,將在輸出中用作 YAML 標籤。與「data」鍵關聯的值將被編碼為 YAML 並輸出,以取代被攔截的物件。

範例 #1 Emit 回呼函式範例

<?php
class EmitExample {
public
$data; // 資料可以是任何 pecl/yaml 適用的類型

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

/**
* Yaml 輸出回呼函式,在 yaml_emit 呼叫時透過類別名稱參考。
*
* 預期返回一個包含 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
...
"
新增註解

使用者貢獻的註解

此頁面尚無使用者提供的註釋。
To Top