2
0

Zend_CodeGenerator-Examples.xml 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  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>
  9. El siguiente ejemplo genera una clase vacía con una clase de nivel
  10. DocBlock.
  11. </para>
  12. <programlisting language="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 language="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 language="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 language="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 language="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 language="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 <acronym>PHP</acronym>.
  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. <varname>$foo</varname> como una de las definiciones de clase del
  247. 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 <methodname>generate()</methodname> 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 language="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 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
  322. via reflection</title>
  323. <para>
  324. You can add <acronym>PHP</acronym> code to an existing <acronym>PHP</acronym> file
  325. using the code generator. To do so, you need to first do reflection on it. The
  326. static method <methodname>fromReflectedFileName()</methodname> allows you to do
  327. this.
  328. </para>
  329. <programlisting language="php"><![CDATA[
  330. $generator = Zend_CodeGenerator_Php_File::fromReflectedFileName($path);
  331. $body = $generator->getBody();
  332. $body .= "\n\$foo->bar();";
  333. file_put_contents($path, $generator->generate());
  334. ]]></programlisting>
  335. </example>
  336. <example id="zend.codegenerator.examples.reflection-class">
  337. <title>Sembrando la generación de clases PHP via reflection</title>
  338. <para>
  339. You may add code to an existing class. To do so, first use the
  340. static <methodname>fromReflection()</methodname> method to map the class into a
  341. generator object. From there, you may add additional properties or
  342. methods, and then regenerate the class.
  343. </para>
  344. <programlisting language="php"><![CDATA[
  345. $generator = Zend_CodeGenerator_Php_Class::fromReflection(
  346. new Zend_Reflection_Class($class)
  347. );
  348. $generator->setMethod(array(
  349. 'name' => 'setBaz',
  350. 'parameters' => array(
  351. array('name' => 'baz'),
  352. ),
  353. 'body' => '$this->_baz = $baz;' . "\n" . 'return $this;',
  354. 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
  355. 'shortDescription' => 'Set the baz property',
  356. 'tags' => array(
  357. new Zend_CodeGenerator_Php_Docblock_Tag_Param(array(
  358. 'paramName' => 'baz',
  359. 'datatype' => 'string'
  360. )),
  361. new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
  362. 'datatype' => 'string',
  363. )),
  364. ),
  365. )),
  366. ));
  367. $code = $generator->generate();
  368. ]]></programlisting>
  369. </example>
  370. <example id="zend.codegenerator.examples.reflection-method">
  371. <title>Sembrando la generación de métodos PHP via reflection</title>
  372. <para>
  373. You may add code to an existing class. To do so, first use the
  374. static <methodname>fromReflection()</methodname> method to map the class into a
  375. generator object. From there, you may add additional properties or
  376. methods, and then regenerate the class.
  377. </para>
  378. </example>
  379. </sect1>