Zend_CodeGenerator-Introduction.xml 4.1 KB

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