ΠŸΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‰ΠΈΠ΅ 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
...
"
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ Π΅Ρ‰Ρ‘ Π½Π΅ добавляли примСчания для страницы