[ZF-10089] Zend_Log
[zend.git] / documentation / manual / es / module_specs / Zend_Json-Objects.xml
blobddbe14e459587187c5d143841d6e7c2e0513aa74
1 <?xml version="1.0" encoding="UTF-8"?>
2     <!-- EN-Revision: 17227 -->
3     <!-- Reviewed: no -->
4 <sect1 id="zend.json.advanced">
5     <title>Uso Avanzado de Zend_Json</title>
7     <sect2 id="zend.json.advanced.objects1">
8         <title>Objetos JSON</title>
9         <para> Cuando se codifican objetos <acronym>PHP</acronym> como
10                 <acronym>JSON</acronym> , todas las propiedades públicas de ese
11             objeto serán codificadas en un objeto <acronym>JSON</acronym> . </para>
12         <para>
13             <acronym>JSON</acronym> no permite referencias a objetos, de manera
14             que debe tenerse cuidado de no codificar objetos con referencias
15             recursivas. Si tiene problemas con la recursión,
16                 <methodname>Zend_Json::encode()</methodname> y
17                 <methodname>Zend_Json_Encoder::encode()</methodname> permiten un
18             segundo parámetro opcional para comprobar si hay recursión; si un
19             objeto es serializado dos veces, se emitirá una excepción. </para>
20         <para> La decodificación de objetos <acronym>JSON</acronym> plantea una
21             dificultad adicional, sin embargo, ya que los objetos Javascript se
22             corresponden más estrechamente a un array asociativo de
23                 <acronym>PHP</acronym> . Algunos sugieren que debe pasarse un
24             identificador de clase, y una instancia del objeto de esa clase debe
25             crearse y alimentarla con datos de pares clave/valor del objeto
26                 <acronym>JSON</acronym> ; otros consideran que esto podría
27             plantear un considerable riesgo de seguridad. </para>
28         <para> Por defecto, <classname>Zend_Json</classname> decodificará
29             objetos <acronym>JSON</acronym> como arrays asociativos. Sin
30             embargo, si desea retornar un objeto, puede especificar esto: </para>
31         <programlisting language="php"><![CDATA[
32 // Decodifica objetos JSON como objetos PHP
33 $phpNative = Zend_Json::decode($encodedValue, Zend_Json::TYPE_OBJECT);
34 ]]></programlisting>
35         <para> Por lo tanto, cualquiera de los objetos decodificados son
36             devueltos como objetos <methodname>StdClass</methodname> con
37             propiedades correspondientea a pares clave/valor en la notación
38                 <acronym>JSON</acronym> . </para>
39         <para> La recomendación de Zend Framework es que el desarrollador debe
40             decidir cómo decodificar objetos <acronym>JSON</acronym> . Si debe
41             crearse un objeto de un determinado tipo, puede ser creado en el
42             código del desarrollador y alimentado con datos de los valores
43             decodificados utilizando <classname>Zend_Json</classname> . </para>
44     </sect2>
46     <sect2 id="zend.json.advanced.objects2">
47         <title>Codificando Objetos PHP</title>
49         <para> Si se codifican objetos <acronym>PHP</acronym> por defecto, el
50             mecanismo de codificación sólo tiene acceso a las propiedades
51             públicas de estos objetos. Cuando se implementa un método
52                 <methodname>toJson()</methodname> en un objeto a codificar,
53                 <classname>Zend_Json</classname> llama a este método y espera
54             que el objeto devuelva una representación <acronym>JSON</acronym> de
55             su estado interno. </para>
56     </sect2>
58     <sect2 id="zend.json.advanced.internal">
59         <title>Codificador/Decodificador Interno</title>
61         <para> Zend_Json tiene dos modos diferentes dependiendo de si ext/json
62             está habilitada o no en su instalación <acronym>PHP</acronym> . Si
63             ext/json está instalado por defecto, las funciones
64                 <methodname>json_encode()</methodname> y
65                 <methodname>json_decode()</methodname> se utilizan para la
66             codificación y decodificación <acronym>JSON</acronym> . Si ext/json
67             no está instalado, una implementación de Zend Framework en código
68                 <acronym>PHP</acronym> es utilizada para la
69             codificación/decodificación. Esto es considerablemente más lento que
70             usando la extensión de <acronym>PHP</acronym> , pero se comporta
71             exactamente igual. </para>
73         <para>También algunas veces puede querer utilizar el
74             codificador/decodificador interno incluso si tiene ext/json
75             instalado. Puede hacer esto llamando a:</para>
77         <programlisting language="php"><![CDATA[
78 Zend_Json::$useBuiltinEncoderDecoder = true:
79 ]]></programlisting>
80     </sect2>
82     <sect2 id="zend.json.advanced.expr">
83         <title>Expresiones JSON</title>
85         <para> Javascript hace uso intenso de las funciones anónimas de llamadas
86             de retorno, que pueden guardarse en variables del objeto
87                 <acronym>JSON</acronym> . Aunque solo funcionan si no regresaron
88             dentro comillas dobles, que es lo que hace naturalmente
89                 <classname>Zend_Json</classname> . Con la Expression de apoyo
90             para Zend_Json este apoyo puede codificar objetos
91                 <acronym>JSON</acronym> con callbacks validos de javascript.
92             Esto funciona tanto con <methodname>json_encode()</methodname> como
93             con el codificador interno. </para>
95         <para> Un callback javascript se representa usando el objero
96                 <classname>Zend_Json_Expr</classname> . Este implementa el
97             patrón del objeto valor y es inmutable. Se puede establecer la
98             expresión de javascript como el primer argumento del constructor.
99             Por defecto <constant>Zend_Json::encode</constant> no codifica
100             callbacks javascript, usted tiene que pasar la opción
101                 <methodname>'enableJsonExprFinder' = true</methodname> dentro de
102             la función <methodname>encode</methodname> . Si se habilita, la
103             expresión de apoyo trabaja para todas las expresiones anidadas en
104             grandes estructuras de objetos. Un ejemplo de uso se vería así: </para>
106         <programlisting language="php"><![CDATA[
107 $data = array(
108     'onClick' => new Zend_Json_Expr('function() {'
109               . 'alert("Yo soy un callback válido de javascript '
110               . 'creado por Zend_Json"); }'),
111     'other' => 'sin expresión',
113 $jsonObjectWithExpression = Zend_Json::encode(
114     $data,
115     false,
116     array('enableJsonExprFinder' => true)
118 ]]></programlisting>
119     </sect2>
120 </sect1>