Zend_CodeGenerator-Examples.xml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15617 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.codegenerator.examples">
  5. <title>Exemples Zend_CodeGenerator</title>
  6. <example id="zend.codegenerator.examples.class">
  7. <title>Génération de classes PHP</title>
  8. <para>
  9. L'exemple suivant génère le code d'une classe avec son bloc de commentaires PHPDoc.
  10. </para>
  11. <programlisting language="php"><![CDATA[
  12. $foo = new Zend_CodeGenerator_Php_Class();
  13. $docblock = new Zend_CodeGenerator_Php_Docblock(array(
  14. 'shortDescription' => 'Sample generated class',
  15. 'longDescription' => 'This is a class generated with Zend_CodeGenerator.',
  16. 'tags' => array(
  17. array(
  18. 'name' => 'version',
  19. 'description' => '$Rev:$',
  20. ),
  21. array(
  22. 'name' => 'license',
  23. 'description' => 'New BSD',
  24. ),
  25. ),
  26. ));
  27. $foo->setName('Foo')
  28. ->setDocblock($docblock);
  29. echo $foo->generate();
  30. ]]></programlisting>
  31. <para>Le résultat est&#160;:</para>
  32. <programlisting language="php"><![CDATA[
  33. /**
  34. * Sample generated class
  35. *
  36. * This is a class generated with Zend_CodeGenerator.
  37. *
  38. * @version $Rev:$
  39. * @license New BSD
  40. *
  41. */
  42. class Foo
  43. {
  44. }
  45. ]]></programlisting>
  46. </example>
  47. <example id="zend.codegenerator.examples.class-properties">
  48. <title>Générer des classes PHP avec des attributs de classe</title>
  49. <para>
  50. Suivant l'exemple précédant, nous ajoutons maintenant des attributs à la
  51. classe.
  52. </para>
  53. <programlisting language="php"><![CDATA[
  54. $foo = new Zend_CodeGenerator_Php_Class();
  55. $docblock = new Zend_CodeGenerator_Php_Docblock(array(
  56. 'shortDescription' => 'Sample generated class',
  57. 'longDescription' => 'This is a class generated with Zend_CodeGenerator.',
  58. 'tags' => array(
  59. array(
  60. 'name' => 'version',
  61. 'description' => '$Rev:$',
  62. ),
  63. array(
  64. 'name' => 'license',
  65. 'description' => 'New BSD',
  66. ),
  67. ),
  68. ));
  69. $foo->setName('Foo')
  70. ->setDocblock($docblock)
  71. ->setProperties(array(
  72. array(
  73. 'name' => '_bar',
  74. 'visibility' => 'protected',
  75. 'defaultValue' => 'baz',
  76. ),
  77. array(
  78. 'name' => 'baz',
  79. 'visibility' => 'public',
  80. 'defaultValue' => 'bat',
  81. ),
  82. array(
  83. 'name' => 'bat',
  84. 'const' => true,
  85. 'defaultValue' => 'foobarbazbat',
  86. ),
  87. ));
  88. echo $foo->generate();
  89. ]]></programlisting>
  90. <para>Le résultat sera&#160;:</para>
  91. <programlisting language="php"><![CDATA[
  92. /**
  93. * Sample generated class
  94. *
  95. * This is a class generated with Zend_CodeGenerator.
  96. *
  97. * @version $Rev:$
  98. * @license New BSD
  99. *
  100. */
  101. class Foo
  102. {
  103. protected $_bar = 'baz';
  104. public $baz = 'bat';
  105. const bat = 'foobarbazbat';
  106. }
  107. ]]></programlisting>
  108. </example>
  109. <example id="zend.codegenerator.examples.class-methods">
  110. <title>Générer des classes PHP avec des méthodes</title>
  111. <para>
  112. <classname>Zend_CodeGenerator_Php_Class</classname> vous permet d'attacher des
  113. méthodes à vos classes générées. L'attachement se fait soit par des tableaux, soit
  114. directement des objets <classname>Zend_CodeGenerator_Php_Method</classname>.
  115. </para>
  116. <programlisting language="php"><![CDATA[
  117. $foo = new Zend_CodeGenerator_Php_Class();
  118. $docblock = new Zend_CodeGenerator_Php_Docblock(array(
  119. 'shortDescription' => 'Sample generated class',
  120. 'longDescription' => 'This is a class generated with Zend_CodeGenerator.',
  121. 'tags' => array(
  122. array(
  123. 'name' => 'version',
  124. 'description' => '$Rev:$',
  125. ),
  126. array(
  127. 'name' => 'license',
  128. 'description' => 'New BSD',
  129. ),
  130. ),
  131. ));
  132. $foo->setName('Foo')
  133. ->setDocblock($docblock)
  134. ->setProperties(array(
  135. array(
  136. 'name' => '_bar',
  137. 'visibility' => 'protected',
  138. 'defaultValue' => 'baz',
  139. ),
  140. array(
  141. 'name' => 'baz',
  142. 'visibility' => 'public',
  143. 'defaultValue' => 'bat',
  144. ),
  145. array(
  146. 'name' => 'bat',
  147. 'const' => true,
  148. 'defaultValue' => 'foobarbazbat',
  149. ),
  150. ))
  151. ->setMethods(array(
  152. // Method passed as array
  153. array(
  154. 'name' => 'setBar',
  155. 'parameters' => array(
  156. array('name' => 'bar'),
  157. ),
  158. 'body' => '$this->_bar = $bar;' . "\n" . 'return $this;',
  159. 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
  160. 'shortDescription' => 'Set the bar property',
  161. 'tags' => array(
  162. new Zend_CodeGenerator_Php_Docblock_Tag_Param(array(
  163. 'paramName' => 'bar',
  164. 'datatype' => 'string'
  165. )),
  166. new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
  167. 'datatype' => 'string',
  168. )),
  169. ),
  170. )),
  171. ),
  172. // Method passed as concrete instance
  173. new Zend_CodeGenerator_Php_Method(array(
  174. 'name' => 'getBar',
  175. 'body' => 'return $this->_bar;',
  176. 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
  177. 'shortDescription' => 'Retrieve the bar property',
  178. 'tags' => array(
  179. new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
  180. 'datatype' => 'string|null',
  181. )),
  182. ),
  183. )),
  184. )),
  185. ));
  186. echo $foo->generate();
  187. ]]></programlisting>
  188. <para>Le résultat sera&#160;:</para>
  189. <programlisting language="php"><![CDATA[
  190. /**
  191. * Sample generated class
  192. *
  193. * This is a class generated with Zend_CodeGenerator.
  194. *
  195. * @version $Rev:$
  196. * @license New BSD
  197. */
  198. class Foo
  199. {
  200. protected $_bar = 'baz';
  201. public $baz = 'bat';
  202. const bat = 'foobarbazbat';
  203. /**
  204. * Set the bar property
  205. *
  206. * @param string bar
  207. * @return string
  208. */
  209. public function setBar($bar)
  210. {
  211. $this->_bar = $bar;
  212. return $this;
  213. }
  214. /**
  215. * Retrieve the bar property
  216. *
  217. * @return string|null
  218. */
  219. public function getBar()
  220. {
  221. return $this->_bar;
  222. }
  223. }
  224. ]]></programlisting>
  225. </example>
  226. <example id="zend.codegenerator.examples.file">
  227. <title>Générer des fichiers PHP</title>
  228. <para>
  229. <classname>Zend_CodeGenerator_Php_File</classname> sert à générer le contenu de
  230. fichiers PHP. Il est possible d'insérer du code de classes, ou du code PHP banal. Si
  231. vous attachez des classes, vous pouvez les passer sous forme de tableaux ou directement
  232. d'objets <classname>Zend_CodeGenerator_Php_Class</classname>.
  233. </para>
  234. <para>
  235. Dans l'exemple suivant, nous supposons que vous avez défini <code>$foo</code> comme
  236. étant le code d'une des classes des exemples précédents.
  237. </para>
  238. <programlisting language="php"><![CDATA[
  239. $file = new Zend_CodeGenerator_Php_File(array(
  240. 'classes' => array($foo);
  241. 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
  242. 'shortDescription' => 'Foo class file',
  243. 'tags' => array(
  244. array(
  245. 'name' => 'license',
  246. 'description' => 'New BSD',
  247. ),
  248. ),
  249. )),
  250. 'body' => 'define(\'APPLICATION_ENV\', \'testing\');',
  251. ));
  252. ]]></programlisting>
  253. <para>
  254. L'appel à <code>generate()</code> va générer le code, mais pas l'écrire dans un
  255. fichier. Pour ce faire, il faudra d'abord capturer le contenu:
  256. </para>
  257. <programlisting language="php"><![CDATA[
  258. $code = $file->generate();
  259. file_put_contents('Foo.php', $code);
  260. ]]></programlisting>
  261. <para>Le résultat sera&#160;:</para>
  262. <programlisting language="php"><![CDATA[
  263. <?php
  264. /**
  265. * Foo class file
  266. *
  267. * @license New BSD
  268. */
  269. /**
  270. * Sample generated class
  271. *
  272. * This is a class generated with Zend_CodeGenerator.
  273. *
  274. * @version $Rev:$
  275. * @license New BSD
  276. */
  277. class Foo
  278. {
  279. protected $_bar = 'baz';
  280. public $baz = 'bat';
  281. const bat = 'foobarbazbat';
  282. /**
  283. * Set the bar property
  284. *
  285. * @param string bar
  286. * @return string
  287. */
  288. public function setBar($bar)
  289. {
  290. $this->_bar = $bar;
  291. return $this;
  292. }
  293. /**
  294. * Retrieve the bar property
  295. *
  296. * @return string|null
  297. */
  298. public function getBar()
  299. {
  300. return $this->_bar;
  301. }
  302. }
  303. define('APPLICATION_ENV', 'testing');
  304. ]]></programlisting>
  305. </example>
  306. <example id="zend.codegenerator.examples.reflection-file">
  307. <title>Ajouter du code à un fichier PHP existant en utilisant la réflexion</title>
  308. <para>
  309. Vous pouvez ajouter du code à n'importe quel fichier PHP existant à condition
  310. d'utiliser la réflexion sur celui-ci afin de l'analyser. La méthode
  311. <code>fromReflectedFileName()</code> va vous y aider
  312. </para>
  313. <programlisting language="php"><![CDATA[
  314. $generator = Zend_CodeGenerator_Php_File::fromReflectedFileName($path);
  315. $body = $generator->getBody();
  316. $body .= "\n\$foo->bar();";
  317. file_put_contents($path, $generator->generate());
  318. ]]></programlisting>
  319. </example>
  320. <example id="zend.codegenerator.examples.reflection-class">
  321. <title>Ajouter du code à une classe PHP existante en utilisant la réflexion</title>
  322. <para>
  323. Vous pouvez aussi ajouter du code à une classe PHP existante. Utilisez
  324. <code>fromReflection()</code> pour transformer la classe en objet Reflection. Ajoutez
  325. ensuite des méthodes, des attributs, puis régénérez le code de la classe
  326. modifiée&#160;:
  327. </para>
  328. <programlisting language="php"><![CDATA[
  329. $generator = Zend_CodeGenerator_Php_Class::fromReflection(
  330. new Zend_Reflection_Class($class)
  331. );
  332. $generator->setMethod(array(
  333. 'name' => 'setBaz',
  334. 'parameters' => array(
  335. array('name' => 'baz'),
  336. ),
  337. 'body' => '$this->_baz = $baz;' . "\n" . 'return $this;',
  338. 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
  339. 'shortDescription' => 'Set the baz property',
  340. 'tags' => array(
  341. new Zend_CodeGenerator_Php_Docblock_Tag_Param(array(
  342. 'paramName' => 'baz',
  343. 'datatype' => 'string'
  344. )),
  345. new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
  346. 'datatype' => 'string',
  347. )),
  348. ),
  349. )),
  350. ));
  351. $code = $generator->generate();
  352. ]]></programlisting>
  353. </example>
  354. </sect1>