1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- EN-Revision: 20765 -->
4 <sect1 id="zend.codegenerator.examples">
5 <title>Ejemplos de Zend_CodeGenerator</title>
7 <example id="zend.codegenerator.examples.class">
8 <title>Generando clases PHP</title>
10 <para>El siguiente ejemplo genera una clase vacía con una clase de
11 nivel DocBlock.</para>
13 <programlisting language="php"><![CDATA[
14 $foo = new Zend_CodeGenerator_Php_Class();
15 $docblock = new Zend_CodeGenerator_Php_Docblock(array(
16 'shortDescription' => 'Sample generated class',
17 'longDescription' => 'This is a class generated with Zend_CodeGenerator.',
21 'description' => '$Rev:$',
25 'description' => 'New BSD',
30 ->setDocblock($docblock);
31 echo $foo->generate();
34 <para>El código anterior resultará en lo siguiente:</para>
36 <programlisting language="php"><![CDATA[
38 * Sample generated class
40 * This is a class generated with Zend_CodeGenerator.
53 <example id="zend.codegenerator.examples.class-properties">
54 <title>Generando clases PHP con propiedades de clase</title>
56 <para>Basándonos en el ejemplo anterior, ahora agreguemos propiedades a
60 <programlisting language="php"><![CDATA[
61 $foo = new Zend_CodeGenerator_Php_Class();
62 $docblock = new Zend_CodeGenerator_Php_Docblock(array(
63 'shortDescription' => 'Sample generated class',
64 'longDescription' => 'This is a class generated with Zend_CodeGenerator.',
68 'description' => '$Rev:$',
72 'description' => 'New BSD',
77 ->setDocblock($docblock)
78 ->setProperties(array(
81 'visibility' => 'protected',
82 'defaultValue' => 'baz',
86 'visibility' => 'public',
87 'defaultValue' => 'bat',
92 'defaultValue' => 'foobarbazbat',
95 echo $foo->generate();
98 <para>Lo anterior resulta en la siguiente definición de clase:</para>
100 <programlisting language="php"><![CDATA[
102 * Sample generated class
104 * This is a class generated with Zend_CodeGenerator.
113 protected $_bar = 'baz';
117 const bat = 'foobarbazbat';
123 <example id="zend.codegenerator.examples.class-methods">
124 <title>Generando clases PHP con métodos de clase</title>
127 <classname>Zend_CodeGenerator_Php_Class</classname>
129 adjuntar métodos con contenido opcional a sus clases. Los métodos
131 adjuntarse tanto como arrys o como instancias concretas de
132 <classname>Zend_CodeGenerator_Php_Method</classname>
136 <programlisting language="php"><![CDATA[
137 $foo = new Zend_CodeGenerator_Php_Class();
138 $docblock = new Zend_CodeGenerator_Php_Docblock(array(
139 'shortDescription' => 'Sample generated class',
140 'longDescription' => 'This is a class generated with Zend_CodeGenerator.',
144 'description' => '$Rev:$',
148 'description' => 'New BSD',
153 ->setDocblock($docblock)
154 ->setProperties(array(
157 'visibility' => 'protected',
158 'defaultValue' => 'baz',
162 'visibility' => 'public',
163 'defaultValue' => 'bat',
168 'defaultValue' => 'foobarbazbat',
172 // Método pasado como array
175 'parameters' => array(
176 array('name' => 'bar'),
178 'body' => '$this->_bar = $bar;' . "\n" . 'return $this;',
179 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
180 'shortDescription' => 'Set the bar property',
182 new Zend_CodeGenerator_Php_Docblock_Tag_Param(array(
183 'paramName' => 'bar',
184 'datatype' => 'string'
186 new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
187 'datatype' => 'string',
192 // Método pasado como instancia concreta
193 new Zend_CodeGenerator_Php_Method(array(
195 'body' => 'return $this->_bar;',
196 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
197 'shortDescription' => 'Retrieve the bar property',
199 new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
200 'datatype' => 'string|null',
207 echo $foo->generate();
210 <para>Lo anterior genera la siguiente salida:</para>
212 <programlisting language="php"><![CDATA[
214 * Sample generated class
216 * This is a class generated with Zend_CodeGenerator.
224 protected $_bar = 'baz';
228 const bat = 'foobarbazbat';
231 * Set the bar property
236 public function setBar($bar)
243 * Retrieve the bar property
245 * @return string|null
247 public function getBar()
256 <example id="zend.codegenerator.examples.file">
257 <title>Generando archivos PHP</title>
260 <classname>Zend_CodeGenerator_Php_File</classname>
262 utilizada para generar el contenido de un archivo
263 <acronym>PHP</acronym>
264 . Usted puede incluir clases, así como el
265 contenido arbitrario del cuerpo. Cuando acople
266 clases, debe adjuntar
267 instancias concretas de
268 <classname>Zend_CodeGenerator_Php_Class</classname>
274 En el ejemplo siguiente, asumiremos que ha definido
275 <varname>$foo</varname>
276 como una de las definiciones de clase
277 del ejemplo anterior.
280 <programlisting language="php"><![CDATA[
281 $file = new Zend_CodeGenerator_Php_File(array(
282 'classes' => array($foo);
283 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
284 'shortDescription' => 'Foo class file',
288 'description' => 'New BSD',
292 'body' => 'define(\'APPLICATION_ENV\', \'testing\');',
298 <methodname>generate()</methodname>
300 -- pero no lo grabará en un archivo. Usted mismo deberá capturar y
301 grabar los contenidos en un archivo. Por ejemplo:
304 <programlisting language="php"><![CDATA[
305 $code = $file->generate();
306 file_put_contents('Foo.php', $code);
309 <para>Lo anterior generará el siguiente archivo:</para>
311 <programlisting language="php"><![CDATA[
320 * Sample generated class
322 * This is a class generated with Zend_CodeGenerator.
330 protected $_bar = 'baz';
334 const bat = 'foobarbazbat';
337 * Set the bar property
342 public function setBar($bar)
349 * Retrieve the bar property
351 * @return string|null
353 public function getBar()
360 define('APPLICATION_ENV', 'testing');
364 <example id="zend.codegenerator.examples.reflection-file">
365 <title>Sembrando la generación de código para un archivo PHP via
369 <acronym>PHP</acronym>
371 <acronym>PHP</acronym>
372 file using the code generator. To do so,
373 you need to first do reflection on it. The
375 <methodname>fromReflectedFileName()</methodname>
380 <programlisting language="php"><![CDATA[
381 $generator = Zend_CodeGenerator_Php_File::fromReflectedFileName($path);
382 $body = $generator->getBody();
383 $body .= "\n\$foo->bar();";
384 file_put_contents($path, $generator->generate());
388 <example id="zend.codegenerator.examples.reflection-class">
389 <title>Sembrando la generación de clases PHP via reflection</title>
391 You may add code to an existing class. To do so, first use the
393 <methodname>fromReflection()</methodname>
395 class into a generator object. From there, you may add additional
396 properties or methods, and then regenerate the class.
399 <programlisting language="php"><![CDATA[
400 $generator = Zend_CodeGenerator_Php_Class::fromReflection(
401 new Zend_Reflection_Class($class)
403 $generator->setMethod(array(
405 'parameters' => array(
406 array('name' => 'baz'),
408 'body' => '$this->_baz = $baz;' . "\n" . 'return $this;',
409 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
410 'shortDescription' => 'Set the baz property',
412 new Zend_CodeGenerator_Php_Docblock_Tag_Param(array(
413 'paramName' => 'baz',
414 'datatype' => 'string'
416 new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
417 'datatype' => 'string',
422 $code = $generator->generate();
426 <example id="zend.codegenerator.examples.reflection-method">
427 <title>Sembrando la generación de métodos PHP via reflection</title>
429 You may add code to an existing class. To do so, first use the
431 <methodname>fromReflection()</methodname>
433 class into a generator object. From there, you may add additional
434 properties or methods, and then regenerate the class.