Callback-ΡΡΠ½ΠΊΡΠΈΠΉ (callback) Π΄Π»Ρ ΠΏΠ°ΡΡΠΈΠ½Π³Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ yaml_parse(), yaml_parse_file() ΠΈΠ»ΠΈ yaml_parse_url() ΠΏΡΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠΈ Π·Π°ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ΅Π³Π° YAML. Π callback-ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π³ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ, ΡΠ°ΠΌ ΡΠ΅Π³ ΠΈ ΡΠ»Π°Π³ΠΈ, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠ΅ ΡΠΊΠ°Π»ΡΡΠ½ΡΠΉ ΡΠΈΠΏ Π·Π°ΠΏΠΈΡΠΈ. Callback-ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° Π²Π΅ΡΠ½ΡΡΡ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ°ΡΡΠ΅Ρ YAML Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ ΡΡΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ.
ΠΡΠΈΠΌΠ΅Ρ #1 ΠΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ callback-ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΠ°ΡΡΠΈΠ½Π³Π°
<?php
/**
* Callback-ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ°ΡΡΠΈΠ½Π³Π° Π΄Π»Ρ ΡΠ΅Π³ΠΎΠ² yaml.
* @param mixed $value ΠΠ°Π½Π½ΡΠ΅ ΠΈΠ· ΡΠ°ΠΉΠ»Π° yaml
* @param string $tag Π’Π΅Π³, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ
* @param int $flags Π‘ΡΠΈΠ»Ρ ΡΠΊΠ°Π»ΡΡΠ° Π·Π°ΠΏΠΈΡΠΈ (ΡΠΌΠΎΡΡΠΈΡΠ΅ YAML_*_SCALAR_STYLE)
* @return mixed ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΡΠ΄Π°ΡΡ ΠΏΠ°ΡΡΠ΅Ρ YAML
*/
function tag_callback ($value, $tag, $flags) {
var_dump(func_get_args()); // ΠΎΡΠ»Π°Π΄ΠΊΠ°
return "Hello {$value}";
}
$yaml = <<<YAML
greeting: !example/hello World
YAML;
$result = yaml_parse($yaml, 0, $ndocs, array(
'!example/hello' => 'tag_callback',
));
var_dump($result);
?>ΠΡΠ²ΠΎΠ΄ ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π±ΡΠ΄Π΅Ρ ΠΏΠΎΡ ΠΎΠΆ Π½Π°:
array(3) {
[0]=>
string(5) "World"
[1]=>
string(14) "!example/hello"
[2]=>
int(1)
}
array(1) {
["greeting"]=>
string(11) "Hello World"
}