Zend_CodeGenerator-Examples.xml 12 KB

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