2
0

Zend_CodeGenerator-Introduction.xml 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15103 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.codegenerator.introduction">
  5. <title>Introducción</title>
  6. <para>
  7. <classname>Zend_CodeGenerator</classname> ofrece facilidades para
  8. generar código arbitrario usando una interfaz orientada a objetos, tanto
  9. para crear código nuevo como para actualizar código existente.
  10. Mientras que la implementación actual se limita a generar código PHP,
  11. usted fácilmente puede extender la clase base a fin de proveer
  12. generación de código para otras tareas como: JavaScript, archivos de
  13. configuración, apache vhost, etc.
  14. </para>
  15. <sect2 id="zend.codegenerator.introduction.theory">
  16. <title>Teoría de Operación</title>
  17. <para>
  18. En el caso de uso más típico, simplemente instanciará una clase de
  19. generación de código y podrá pasarle tanto la configuración adecuada
  20. o configurarla después de la instanciación. Para generar el código,
  21. simplemente haga "echo" del objeto o llame a su método
  22. <code>generate()</code>.
  23. </para>
  24. <programlisting role="php"><![CDATA[
  25. // Pasando la configuración al constructor:
  26. $file = new Zend_CodeGenerator_Php_File(array(
  27. 'classes' => array(
  28. new Zend_CodeGenerator_Php_Class(array(
  29. 'name' => 'World',
  30. 'methods' => array(
  31. new Zend_CodeGenerator_Php_Method(array(
  32. 'name' => 'hello',
  33. 'body' => 'echo \'Hello world!\';',
  34. )),
  35. ),
  36. )),
  37. )
  38. ));
  39. // Configurando después de la instanciación
  40. $method = new Zend_CodeGenerator_Php_Method();
  41. $method->setName('hello')
  42. ->setBody('echo \'Hello world!\';');
  43. $class = new Zend_CodeGenerator_Php_Class();
  44. $class->setName('World')
  45. ->setMethod($method);
  46. $file = new Zend_CodeGenerator_Php_File();
  47. $file->setClass($class);
  48. // Mostrar el archivo generado
  49. echo $file;
  50. // o grabarlo a un archivo:
  51. file_put_contents('World.php', $file->generate());
  52. ]]></programlisting>
  53. <para>
  54. Ambos ejemplos anteriores mostrarán el mismo resultado:
  55. </para>
  56. <programlisting role="php"><![CDATA[
  57. <?php
  58. class World
  59. {
  60. public function hello()
  61. {
  62. echo 'Hello world!';
  63. }
  64. }
  65. ]]></programlisting>
  66. <para>
  67. Otro caso de uso común es actualizar el código actual -- por ejemplo,
  68. para añadir un método a una clase. En ese caso, primero debe
  69. inspeccionar el código actual utilizando reflexión, y entonces
  70. añadir su nuevo método.
  71. <classname>Zend_CodeGenerator</classname> lo hace trivialmente simple,
  72. aprovechando <link linkend="zend.reflection">Zend_Reflection</link>.
  73. </para>
  74. <para>
  75. Como ejemplo, digamos que hemos grabado lo anterior al archivo
  76. "World.php", y que ya está incluído. Podríamos entonces hacer lo
  77. siguiente:
  78. </para>
  79. <programlisting role="php"><![CDATA[
  80. $class = Zend_CodeGenerator_Php_Class::fromReflection(
  81. new Zend_Reflection_Class('World')
  82. );
  83. $method = new Zend_CodeGenerator_Php_Method();
  84. $method->setName('mrMcFeeley')
  85. ->setBody('echo \'Hello, Mr. McFeeley!\';');
  86. $class->setMethod($method);
  87. $file = new Zend_CodeGenerator_Php_File();
  88. $file->setClass($class);
  89. // Mostrar el archivo generado
  90. echo $file;
  91. // O mejor aún, volver a grabarlo al archivo original:
  92. file_put_contents('World.php', $file->generate());
  93. ]]></programlisting>
  94. <para>
  95. El archivo de la clase resultante se vería así:
  96. </para>
  97. <programlisting role="php"><![CDATA[
  98. <?php
  99. class World
  100. {
  101. public function hello()
  102. {
  103. echo 'Hello world!';
  104. }
  105. public function mrMcFeeley()
  106. {
  107. echo 'Hellow Mr. McFeeley!';
  108. }
  109. }
  110. ]]></programlisting>
  111. </sect2>
  112. </sect1>