2
0

Zend_CodeGenerator-Examples.xml 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15103 -->
  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>
  9. El siguiente ejemplo genera una clase vacía con una clase de nivel
  10. DocBlock.
  11. </para>
  12. <programlisting role="php"><![CDATA[
  13. $foo = new Zend_CodeGenerator_Php_Class();
  14. $docblock = new Zend_CodeGenerator_Php_Docblock(array(
  15. 'shortDescription' => 'Sample generated class',
  16. 'longDescription' => 'This is a class generated with Zend_CodeGenerator.',
  17. 'tags' => array(
  18. array(
  19. 'name' => 'version',
  20. 'description' => '$Rev:$',
  21. ),
  22. array(
  23. 'name' => 'license',
  24. 'description' => 'New BSD',
  25. ),
  26. ),
  27. ));
  28. $foo->setName('Foo')
  29. ->setDocblock($docblock);
  30. echo $foo->generate();
  31. ]]></programlisting>
  32. <para>
  33. El código anterior resultará en lo siguiente:
  34. </para>
  35. <programlisting role="php"><![CDATA[
  36. /**
  37. * Sample generated class
  38. *
  39. * This is a class generated with Zend_CodeGenerator.
  40. *
  41. * @version $Rev:$
  42. * @license New BSD
  43. *
  44. */
  45. class Foo
  46. {
  47. }
  48. ]]></programlisting>
  49. </example>
  50. <example id="zend.codegenerator.examples.class-properties">
  51. <title>Generando clases PHP con propiedades de clase</title>
  52. <para>
  53. Basándonos en el ejemplo anterior, ahora agreguemos propiedades a
  54. nuestra clase generada.
  55. </para>
  56. <programlisting role="php"><![CDATA[
  57. $foo = new Zend_CodeGenerator_Php_Class();
  58. $docblock = new Zend_CodeGenerator_Php_Docblock(array(
  59. 'shortDescription' => 'Sample generated class',
  60. 'longDescription' => 'This is a class generated with Zend_CodeGenerator.',
  61. 'tags' => array(
  62. array(
  63. 'name' => 'version',
  64. 'description' => '$Rev:$',
  65. ),
  66. array(
  67. 'name' => 'license',
  68. 'description' => 'New BSD',
  69. ),
  70. ),
  71. ));
  72. $foo->setName('Foo')
  73. ->setDocblock($docblock)
  74. ->setProperties(array(
  75. array(
  76. 'name' => '_bar',
  77. 'visibility' => 'protected',
  78. 'defaultValue' => 'baz',
  79. ),
  80. array(
  81. 'name' => 'baz',
  82. 'visibility' => 'public',
  83. 'defaultValue' => 'bat',
  84. ),
  85. array(
  86. 'name' => 'bat',
  87. 'const' => true,
  88. 'defaultValue' => 'foobarbazbat',
  89. ),
  90. ));
  91. echo $foo->generate();
  92. ]]></programlisting>
  93. <para>
  94. Lo anterior resulta en la siguiente definición de clase:
  95. </para>
  96. <programlisting role="php"><![CDATA[
  97. /**
  98. * Sample generated class
  99. *
  100. * This is a class generated with Zend_CodeGenerator.
  101. *
  102. * @version $Rev:$
  103. * @license New BSD
  104. *
  105. */
  106. class Foo
  107. {
  108. protected $_bar = 'baz';
  109. public $baz = 'bat';
  110. const bat = 'foobarbazbat';
  111. }
  112. ]]></programlisting>
  113. </example>
  114. <example id="zend.codegenerator.examples.class-methods">
  115. <title>Generando clases PHP con métodos de clase</title>
  116. <para>
  117. <classname>Zend_CodeGenerator_Php_Class</classname> le permite
  118. adjuntar métodos con contenido opcional a sus clases.
  119. Los métodos pueden adjuntarse tanto como arrys o como instancias
  120. concretas de <classname>Zend_CodeGenerator_Php_Method</classname>.
  121. </para>
  122. <programlisting role="php"><![CDATA[
  123. $foo = new Zend_CodeGenerator_Php_Class();
  124. $docblock = new Zend_CodeGenerator_Php_Docblock(array(
  125. 'shortDescription' => 'Sample generated class',
  126. 'longDescription' => 'This is a class generated with Zend_CodeGenerator.',
  127. 'tags' => array(
  128. array(
  129. 'name' => 'version',
  130. 'description' => '$Rev:$',
  131. ),
  132. array(
  133. 'name' => 'license',
  134. 'description' => 'New BSD',
  135. ),
  136. ),
  137. ));
  138. $foo->setName('Foo')
  139. ->setDocblock($docblock)
  140. ->setProperties(array(
  141. array(
  142. 'name' => '_bar',
  143. 'visibility' => 'protected',
  144. 'defaultValue' => 'baz',
  145. ),
  146. array(
  147. 'name' => 'baz',
  148. 'visibility' => 'public',
  149. 'defaultValue' => 'bat',
  150. ),
  151. array(
  152. 'name' => 'bat',
  153. 'const' => true,
  154. 'defaultValue' => 'foobarbazbat',
  155. ),
  156. ))
  157. ->setMethods(array(
  158. // Método pasado como array
  159. array(
  160. 'name' => 'setBar',
  161. 'parameters' => array(
  162. array('name' => 'bar'),
  163. ),
  164. 'body' => '$this->_bar = $bar;' . "\n" . 'return $this;',
  165. 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
  166. 'shortDescription' => 'Set the bar property',
  167. 'tags' => array(
  168. new Zend_CodeGenerator_Php_Docblock_Tag_Param(array(
  169. 'paramName' => 'bar',
  170. 'datatype' => 'string'
  171. )),
  172. new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
  173. 'datatype' => 'string',
  174. )),
  175. ),
  176. )),
  177. ),
  178. // Método pasado como instancia concreta
  179. new Zend_CodeGenerator_Php_Method(array(
  180. 'name' => 'getBar',
  181. 'body' => 'return $this->_bar;',
  182. 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
  183. 'shortDescription' => 'Retrieve the bar property',
  184. 'tags' => array(
  185. new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
  186. 'datatype' => 'string|null',
  187. )),
  188. ),
  189. )),
  190. )),
  191. ));
  192. echo $foo->generate();
  193. ]]></programlisting>
  194. <para>
  195. Lo anterior genera la siguiente salida:
  196. </para>
  197. <programlisting role="php"><![CDATA[
  198. /**
  199. * Sample generated class
  200. *
  201. * This is a class generated with Zend_CodeGenerator.
  202. *
  203. * @version $Rev:$
  204. * @license New BSD
  205. */
  206. class Foo
  207. {
  208. protected $_bar = 'baz';
  209. public $baz = 'bat';
  210. const bat = 'foobarbazbat';
  211. /**
  212. * Set the bar property
  213. *
  214. * @param string bar
  215. * @return string
  216. */
  217. public function setBar($bar)
  218. {
  219. $this->_bar = $bar;
  220. return $this;
  221. }
  222. /**
  223. * Retrieve the bar property
  224. *
  225. * @return string|null
  226. */
  227. public function getBar()
  228. {
  229. return $this->_bar;
  230. }
  231. }
  232. ]]></programlisting>
  233. </example>
  234. <example id="zend.codegenerator.examples.file">
  235. <title>Generando archivos PHP</title>
  236. <para>
  237. <classname>Zend_CodeGenerator_Php_File</classname> puede ser
  238. utilizada para generar el contenido de un archivo PHP.
  239. Usted puede incluir clases, así como el contenido arbitrario del
  240. cuerpo. Cuando acople clases, debe adjuntar instancias concretas de
  241. <classname>Zend_CodeGenerator_Php_Class</classname> o un array
  242. definiendo la clase.
  243. </para>
  244. <para>
  245. En el ejemplo siguiente, asumiremos que ha definido
  246. <code>$foo</code> como una de las definiciones de clase del
  247. ejemplo anterior.
  248. </para>
  249. <programlisting role="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 <code>generate()</code> generará el código -- pero no lo
  266. grabará en un archivo. Usted mismo deberá capturar y grabar los
  267. contenidos en un archivo. Por ejemplo:
  268. </para>
  269. <programlisting role="php"><![CDATA[
  270. $code = $file->generate();
  271. file_put_contents('Foo.php', $code);
  272. ]]></programlisting>
  273. <para>
  274. Lo anterior generará el siguiente archivo:
  275. </para>
  276. <programlisting role="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
  322. via reflection</title>
  323. <para></para>
  324. <!-- @todo -->
  325. </example>
  326. <example id="zend.codegenerator.examples.reflection-class">
  327. <title>Sembrando la generación de clases PHP via reflection</title>
  328. <para></para>
  329. <!-- @todo -->
  330. </example>
  331. <example id="zend.codegenerator.examples.reflection-method">
  332. <title>Sembrando la generación de métodos PHP via reflection</title>
  333. <para></para>
  334. <!-- @todo -->
  335. </example>
  336. </sect1>