| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.codegenerator.introduction">
- <title>Introducción</title>
- <para>
- <classname>Zend_CodeGenerator</classname>
- ofrece facilidades para
- generar código arbitrario usando una interfaz orientada a objetos,
- tanto
- para crear código nuevo como para actualizar código existente.
- Mientras que la
- implementación actual se limita a generar código
- <acronym>PHP</acronym>
- ,
- usted fácilmente puede extender la clase base a fin de proveer
- generación de código para
- otras tareas como: JavaScript, archivos de
- configuración, apache vhost, etc.
- </para>
- <sect2 id="zend.codegenerator.introduction.theory">
- <title>Teoría de Operación</title>
- <para>
- En el caso de uso más típico, simplemente instanciará una clase de
- generación de código y
- podrá pasarle tanto la configuración adecuada
- o configurarla después de la instanciación.
- Para generar el código,
- simplemente haga "echo" del objeto o llame a su método
- <methodname>generate()</methodname>
- .
- </para>
- <programlisting language="php"><![CDATA[
- // Pasando la configuración al constructor:
- $file = new Zend_CodeGenerator_Php_File(array(
- 'classes' => array(
- new Zend_CodeGenerator_Php_Class(array(
- 'name' => 'World',
- 'methods' => array(
- new Zend_CodeGenerator_Php_Method(array(
- 'name' => 'hello',
- 'body' => 'echo \'Hello world!\';',
- )),
- ),
- )),
- )
- ));
- // Configurando después de la instanciación
- $method = new Zend_CodeGenerator_Php_Method();
- $method->setName('hello')
- ->setBody('echo \'Hello world!\';');
- $class = new Zend_CodeGenerator_Php_Class();
- $class->setName('World')
- ->setMethod($method);
- $file = new Zend_CodeGenerator_Php_File();
- $file->setClass($class);
- // Mostrar el archivo generado
- echo $file;
- // o grabarlo a un archivo:
- file_put_contents('World.php', $file->generate());
- ]]></programlisting>
- <para>
- Ambos ejemplos anteriores mostrarán el mismo resultado:
- </para>
- <programlisting language="php"><![CDATA[
- <?php
- class World
- {
- public function hello()
- {
- echo 'Hello world!';
- }
- }
- ]]></programlisting>
- <para>
- Otro caso de uso común es actualizar el código actual -- por ejemplo,
- para añadir un
- método a una clase. En ese caso, primero debe
- inspeccionar el código actual utilizando
- reflexión, y entonces
- añadir su nuevo método.
- <classname>Zend_CodeGenerator</classname>
- lo hace trivialmente simple,
- aprovechando
- <link linkend="zend.reflection">Zend_Reflection</link>
- .
- </para>
- <para>
- Como ejemplo, digamos que hemos grabado lo anterior al archivo
- "
- <filename>World.php</filename>
- ", y que ya está incluído. Podríamos entonces hacer lo
- siguiente:
- </para>
- <programlisting language="php"><![CDATA[
- $class = Zend_CodeGenerator_Php_Class::fromReflection(
- new Zend_Reflection_Class('World')
- );
- $method = new Zend_CodeGenerator_Php_Method();
- $method->setName('mrMcFeeley')
- ->setBody('echo \'Hello, Mr. McFeeley!\';');
- $class->setMethod($method);
- $file = new Zend_CodeGenerator_Php_File();
- $file->setClass($class);
- // Mostrar el archivo generado
- echo $file;
- // O mejor aún, volver a grabarlo al archivo original:
- file_put_contents('World.php', $file->generate());
- ]]></programlisting>
- <para>
- El archivo de la clase resultante se vería así:
- </para>
- <programlisting language="php"><![CDATA[
- <?php
- class World
- {
- public function hello()
- {
- echo 'Hello world!';
- }
- public function mrMcFeeley()
- {
- echo 'Hellow Mr. McFeeley!';
- }
- }
- ]]></programlisting>
- </sect2>
- </sect1>
|