-
Notifications
You must be signed in to change notification settings - Fork 49
/
callbacks.xml
163 lines (151 loc) · 4.28 KB
/
callbacks.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 80872147aa52367137bd3d168412f70cbe2ddf9c Maintainer: edwincartagenah Status: ready -->
<!-- Reviewed: yes -->
<chapter xml:id="yaml.callbacks" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Callbacks</title>
<section xml:id="yaml.callbacks.parse">
<title>Análisis de callbacks</title>
<para>
Los análisis de <type>callable</type>s son invocados por las funciones
<function>yaml_parse</function>, <function>yaml_parse_file</function> o
<function>yaml_parse_url</function> cuando encuentran una etiqueta YAML
registrada. Al callback se le pasa el valor de la entidad de la etiqueta, la etiqueta,
y los flags que indican el estilo escalar de la entidad. El callback debe
devolver los datos que el convertidor YAML debe emitir para esta entidad.
</para>
<example>
<title>Ejemplo de análisis de callback</title>
<programlisting role="php">
<![CDATA[
<?php
/**
* Análisis de callback para un tag yaml.
* @param mixed $valor Datos del archivo yaml
* @param string $tag Etiqueta que desencadenó el callback
* @param int $flags Estilo escalar de la entidad (ver YAML_*_SCALAR_STYLE)
* @return mixed Valor que el convertidor YAML debería emitir para el valor dado
*/
function tag_callback ($valor, $tag, $flags) {
var_dump(func_get_args()); // depurando
return "Hola {$valor}";
}
$yaml = <<<YAML
saludo: !ejemplo/hola Mundo
YAML;
$resultado = yaml_parse($yaml, 0, $ndocs, array(
'!ejemplo/hola' => 'tag_callback',
));
var_dump($resultado);
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
array(3) {
[0]=>
string(5) "Mundo"
[1]=>
string(14) "!ejemplo/hola"
[2]=>
int(1)
}
array(1) {
["saludo"]=>
string(11) "Hola Mundo"
}
]]>
</screen>
</example>
</section>
<section xml:id="yaml.callbacks.emit">
<title>Emitir callbacks</title>
<para>
Las emisiones de callbacks son invocadas cuando una instancia de una clase registrada es
emitida por la función <function>yaml_emit</function> o la función
<function>yaml_emit_file</function>. El callback se pasa al objeto a
ser emitido. El callback debe devolver un array que contenga dos claves:
"<literal>tag</literal>" y "<literal>data</literal>".
El valor asociado con la clave "<literal>tag</literal>" debe
ser un string a ser usado como la etiqueta YAML en la salida. El valor asociado
con la clave "<literal>data</literal>" será encodeado como YAML
y será emitido en lugar del objeto interceptado.
</para>
<example>
<title>Ejemplo de emisión de callback</title>
<programlisting role="php">
<![CDATA[
<?php
class EmitExample {
public $data; // los datos podrían ser ajustables en cualquier tipo de pecl/yaml
public function __construct ($d) {
$this->data = $d;
}
/**
* Yaml emite la función de callback, referida a la llamada yaml_emit por el nombre de la clase.
*
* Se espera que devuelva un array con 2 valores:
* - 'tag': etiqueta personalizada para esta serialización
* - 'data': valor que se convierte a yaml (ya sea array, string, bool, número)
*
* @param object $obj Objeto a ser emitido
* @return array Etiqueta y datos sustitutivos a emitir
*/
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);
?>
]]>
</programlisting>
&example.outputs.similar;
<screen>
<![CDATA[
string(43) "---
example: !example/emit
- a
- b
- c
...
"
]]>
</screen>
</example>
</section>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->