Zend_CodeGenerator-Examples.xml 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15976 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.codegenerator.examples">
  5. <title>Ejemplos de Zend_CodeGenerator</title>
  6. <example id="zend.codegenerator.examples.class">
  7. <title>Generando clases PHP</title>
  8. <para> El siguiente ejemplo genera una clase vacía con una clase de
  9. nivel DocBlock. </para>
  10. <programlisting language="php"><![CDATA[
  11. $foo = new Zend_CodeGenerator_Php_Class();
  12. $docblock = new Zend_CodeGenerator_Php_Docblock(array(
  13. 'shortDescription' => 'Sample generated class',
  14. 'longDescription' => 'This is a class generated with Zend_CodeGenerator.',
  15. 'tags' => array(
  16. array(
  17. 'name' => 'version',
  18. 'description' => '$Rev:$',
  19. ),
  20. array(
  21. 'name' => 'license',
  22. 'description' => 'New BSD',
  23. ),
  24. ),
  25. ));
  26. $foo->setName('Foo')
  27. ->setDocblock($docblock);
  28. echo $foo->generate();
  29. ]]></programlisting>
  30. <para> El código anterior resultará en lo siguiente: </para>
  31. <programlisting language="php"><![CDATA[
  32. /**
  33. * Sample generated class
  34. *
  35. * This is a class generated with Zend_CodeGenerator.
  36. *
  37. * @version $Rev:$
  38. * @license New BSD
  39. *
  40. */
  41. class Foo
  42. {
  43. }
  44. ]]></programlisting>
  45. </example>
  46. <example id="zend.codegenerator.examples.class-properties">
  47. <title>Generando clases PHP con propiedades de clase</title>
  48. <para> Basándonos en el ejemplo anterior, ahora agreguemos propiedades a
  49. nuestra clase generada. </para>
  50. <programlisting language="php"><![CDATA[
  51. $foo = new Zend_CodeGenerator_Php_Class();
  52. $docblock = new Zend_CodeGenerator_Php_Docblock(array(
  53. 'shortDescription' => 'Sample generated class',
  54. 'longDescription' => 'This is a class generated with Zend_CodeGenerator.',
  55. 'tags' => array(
  56. array(
  57. 'name' => 'version',
  58. 'description' => '$Rev:$',
  59. ),
  60. array(
  61. 'name' => 'license',
  62. 'description' => 'New BSD',
  63. ),
  64. ),
  65. ));
  66. $foo->setName('Foo')
  67. ->setDocblock($docblock)
  68. ->setProperties(array(
  69. array(
  70. 'name' => '_bar',
  71. 'visibility' => 'protected',
  72. 'defaultValue' => 'baz',
  73. ),
  74. array(
  75. 'name' => 'baz',
  76. 'visibility' => 'public',
  77. 'defaultValue' => 'bat',
  78. ),
  79. array(
  80. 'name' => 'bat',
  81. 'const' => true,
  82. 'defaultValue' => 'foobarbazbat',
  83. ),
  84. ));
  85. echo $foo->generate();
  86. ]]></programlisting>
  87. <para> Lo anterior resulta en la siguiente definición de clase: </para>
  88. <programlisting language="php"><![CDATA[
  89. /**
  90. * Sample generated class
  91. *
  92. * This is a class generated with Zend_CodeGenerator.
  93. *
  94. * @version $Rev:$
  95. * @license New BSD
  96. *
  97. */
  98. class Foo
  99. {
  100. protected $_bar = 'baz';
  101. public $baz = 'bat';
  102. const bat = 'foobarbazbat';
  103. }
  104. ]]></programlisting>
  105. </example>
  106. <example id="zend.codegenerator.examples.class-methods">
  107. <title>Generando clases PHP con métodos de clase</title>
  108. <para>
  109. <classname>Zend_CodeGenerator_Php_Class</classname> le permite
  110. adjuntar métodos con contenido opcional a sus clases. Los métodos
  111. pueden adjuntarse tanto como arrys o como instancias concretas de
  112. <classname>Zend_CodeGenerator_Php_Method</classname>. </para>
  113. <programlisting language="php"><![CDATA[
  114. $foo = new Zend_CodeGenerator_Php_Class();
  115. $docblock = new Zend_CodeGenerator_Php_Docblock(array(
  116. 'shortDescription' => 'Sample generated class',
  117. 'longDescription' => 'This is a class generated with Zend_CodeGenerator.',
  118. 'tags' => array(
  119. array(
  120. 'name' => 'version',
  121. 'description' => '$Rev:$',
  122. ),
  123. array(
  124. 'name' => 'license',
  125. 'description' => 'New BSD',
  126. ),
  127. ),
  128. ));
  129. $foo->setName('Foo')
  130. ->setDocblock($docblock)
  131. ->setProperties(array(
  132. array(
  133. 'name' => '_bar',
  134. 'visibility' => 'protected',
  135. 'defaultValue' => 'baz',
  136. ),
  137. array(
  138. 'name' => 'baz',
  139. 'visibility' => 'public',
  140. 'defaultValue' => 'bat',
  141. ),
  142. array(
  143. 'name' => 'bat',
  144. 'const' => true,
  145. 'defaultValue' => 'foobarbazbat',
  146. ),
  147. ))
  148. ->setMethods(array(
  149. // Método pasado como array
  150. array(
  151. 'name' => 'setBar',
  152. 'parameters' => array(
  153. array('name' => 'bar'),
  154. ),
  155. 'body' => '$this->_bar = $bar;' . "\n" . 'return $this;',
  156. 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
  157. 'shortDescription' => 'Set the bar property',
  158. 'tags' => array(
  159. new Zend_CodeGenerator_Php_Docblock_Tag_Param(array(
  160. 'paramName' => 'bar',
  161. 'datatype' => 'string'
  162. )),
  163. new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
  164. 'datatype' => 'string',
  165. )),
  166. ),
  167. )),
  168. ),
  169. // Método pasado como instancia concreta
  170. new Zend_CodeGenerator_Php_Method(array(
  171. 'name' => 'getBar',
  172. 'body' => 'return $this->_bar;',
  173. 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
  174. 'shortDescription' => 'Retrieve the bar property',
  175. 'tags' => array(
  176. new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
  177. 'datatype' => 'string|null',
  178. )),
  179. ),
  180. )),
  181. )),
  182. ));
  183. echo $foo->generate();
  184. ]]></programlisting>
  185. <para> Lo anterior genera la siguiente salida: </para>
  186. <programlisting language="php"><![CDATA[
  187. /**
  188. * Sample generated class
  189. *
  190. * This is a class generated with Zend_CodeGenerator.
  191. *
  192. * @version $Rev:$
  193. * @license New BSD
  194. */
  195. class Foo
  196. {
  197. protected $_bar = 'baz';
  198. public $baz = 'bat';
  199. const bat = 'foobarbazbat';
  200. /**
  201. * Set the bar property
  202. *
  203. * @param string bar
  204. * @return string
  205. */
  206. public function setBar($bar)
  207. {
  208. $this->_bar = $bar;
  209. return $this;
  210. }
  211. /**
  212. * Retrieve the bar property
  213. *
  214. * @return string|null
  215. */
  216. public function getBar()
  217. {
  218. return $this->_bar;
  219. }
  220. }
  221. ]]></programlisting>
  222. </example>
  223. <example id="zend.codegenerator.examples.file">
  224. <title>Generando archivos PHP</title>
  225. <para>
  226. <classname>Zend_CodeGenerator_Php_File</classname> puede ser
  227. utilizada para generar el contenido de un archivo
  228. <acronym>PHP</acronym>. Usted puede incluir clases, así como el
  229. contenido arbitrario del cuerpo. Cuando acople clases, debe adjuntar
  230. instancias concretas de
  231. <classname>Zend_CodeGenerator_Php_Class</classname> o un array
  232. definiendo la clase. </para>
  233. <para> En el ejemplo siguiente, asumiremos que ha definido
  234. <varname>$foo</varname> como una de las definiciones de clase
  235. del ejemplo anterior. </para>
  236. <programlisting language="php"><![CDATA[
  237. $file = new Zend_CodeGenerator_Php_File(array(
  238. 'classes' => array($foo);
  239. 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
  240. 'shortDescription' => 'Foo class file',
  241. 'tags' => array(
  242. array(
  243. 'name' => 'license',
  244. 'description' => 'New BSD',
  245. ),
  246. ),
  247. )),
  248. 'body' => 'define(\'APPLICATION_ENV\', \'testing\');',
  249. ));
  250. ]]></programlisting>
  251. <para> Llamando a <methodname>generate()</methodname> generará el código
  252. -- pero no lo grabará en un archivo. Usted mismo deberá capturar y
  253. grabar los contenidos en un archivo. Por ejemplo: </para>
  254. <programlisting language="php"><![CDATA[
  255. $code = $file->generate();
  256. file_put_contents('Foo.php', $code);
  257. ]]></programlisting>
  258. <para> Lo anterior generará el siguiente archivo: </para>
  259. <programlisting language="php"><![CDATA[
  260. <?php
  261. /**
  262. * Foo class file
  263. *
  264. * @license New BSD
  265. */
  266. /**
  267. * Sample generated class
  268. *
  269. * This is a class generated with Zend_CodeGenerator.
  270. *
  271. * @version $Rev:$
  272. * @license New BSD
  273. */
  274. class Foo
  275. {
  276. protected $_bar = 'baz';
  277. public $baz = 'bat';
  278. const bat = 'foobarbazbat';
  279. /**
  280. * Set the bar property
  281. *
  282. * @param string bar
  283. * @return string
  284. */
  285. public function setBar($bar)
  286. {
  287. $this->_bar = $bar;
  288. return $this;
  289. }
  290. /**
  291. * Retrieve the bar property
  292. *
  293. * @return string|null
  294. */
  295. public function getBar()
  296. {
  297. return $this->_bar;
  298. }
  299. }
  300. define('APPLICATION_ENV', 'testing');
  301. ]]></programlisting>
  302. </example>
  303. <example id="zend.codegenerator.examples.reflection-file">
  304. <title>Sembrando la generación de código para un archivo PHP via
  305. reflection</title>
  306. <para> You can add <acronym>PHP</acronym> code to an existing
  307. <acronym>PHP</acronym> file using the code generator. To do so,
  308. you need to first do reflection on it. The static method
  309. <methodname>fromReflectedFileName()</methodname> allows you to
  310. do this. </para>
  311. <programlisting language="php"><![CDATA[
  312. $generator = Zend_CodeGenerator_Php_File::fromReflectedFileName($path);
  313. $body = $generator->getBody();
  314. $body .= "\n\$foo->bar();";
  315. file_put_contents($path, $generator->generate());
  316. ]]></programlisting>
  317. </example>
  318. <example id="zend.codegenerator.examples.reflection-class">
  319. <title>Sembrando la generación de clases PHP via reflection</title>
  320. <para> You may add code to an existing class. To do so, first use the
  321. static <methodname>fromReflection()</methodname> method to map the
  322. class into a generator object. From there, you may add additional
  323. properties or methods, and then regenerate the class. </para>
  324. <programlisting language="php"><![CDATA[
  325. $generator = Zend_CodeGenerator_Php_Class::fromReflection(
  326. new Zend_Reflection_Class($class)
  327. );
  328. $generator->setMethod(array(
  329. 'name' => 'setBaz',
  330. 'parameters' => array(
  331. array('name' => 'baz'),
  332. ),
  333. 'body' => '$this->_baz = $baz;' . "\n" . 'return $this;',
  334. 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
  335. 'shortDescription' => 'Set the baz property',
  336. 'tags' => array(
  337. new Zend_CodeGenerator_Php_Docblock_Tag_Param(array(
  338. 'paramName' => 'baz',
  339. 'datatype' => 'string'
  340. )),
  341. new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
  342. 'datatype' => 'string',
  343. )),
  344. ),
  345. )),
  346. ));
  347. $code = $generator->generate();
  348. ]]></programlisting>
  349. </example>
  350. <example id="zend.codegenerator.examples.reflection-method">
  351. <title>Sembrando la generación de métodos PHP via reflection</title>
  352. <para> You may add code to an existing class. To do so, first use the
  353. static <methodname>fromReflection()</methodname> method to map the
  354. class into a generator object. From there, you may add additional
  355. properties or methods, and then regenerate the class. </para>
  356. </example>
  357. </sect1>