Zend_CodeGenerator-Examples.xml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  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 <acronym>PHP</acronym>. Il est possible d'insérer du code de classes,
  231. ou n'importe quel code. Si
  232. vous attachez des classes, vous pouvez les passer sous forme de tableaux ou directement
  233. d'objets <classname>Zend_CodeGenerator_Php_Class</classname>.
  234. </para>
  235. <para>
  236. Dans l'exemple suivant, nous supposons que vous avez défini <varname>$foo</varname>
  237. comme étant le code d'une des classes des exemples précédents.
  238. </para>
  239. <programlisting language="php"><![CDATA[
  240. $file = new Zend_CodeGenerator_Php_File(array(
  241. 'classes' => array($foo);
  242. 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
  243. 'shortDescription' => 'Foo class file',
  244. 'tags' => array(
  245. array(
  246. 'name' => 'license',
  247. 'description' => 'New BSD',
  248. ),
  249. ),
  250. )),
  251. 'body' => 'define(\'APPLICATION_ENV\', \'testing\');',
  252. ));
  253. ]]></programlisting>
  254. <para>
  255. L'appel à <methodname>generate()</methodname> va générer le code, mais pas l'écrire
  256. dans un fichier. Pour ce faire, il faudra d'abord capturer le contenu:
  257. </para>
  258. <programlisting language="php"><![CDATA[
  259. $code = $file->generate();
  260. file_put_contents('Foo.php', $code);
  261. ]]></programlisting>
  262. <para>Le résultat sera&#160;:</para>
  263. <programlisting language="php"><![CDATA[
  264. <?php
  265. /**
  266. * Foo class file
  267. *
  268. * @license New BSD
  269. */
  270. /**
  271. * Sample generated class
  272. *
  273. * This is a class generated with Zend_CodeGenerator.
  274. *
  275. * @version $Rev:$
  276. * @license New BSD
  277. */
  278. class Foo
  279. {
  280. protected $_bar = 'baz';
  281. public $baz = 'bat';
  282. const bat = 'foobarbazbat';
  283. /**
  284. * Set the bar property
  285. *
  286. * @param string bar
  287. * @return string
  288. */
  289. public function setBar($bar)
  290. {
  291. $this->_bar = $bar;
  292. return $this;
  293. }
  294. /**
  295. * Retrieve the bar property
  296. *
  297. * @return string|null
  298. */
  299. public function getBar()
  300. {
  301. return $this->_bar;
  302. }
  303. }
  304. define('APPLICATION_ENV', 'testing');
  305. ]]></programlisting>
  306. </example>
  307. <example id="zend.codegenerator.examples.reflection-file">
  308. <title>Ajouter du code à un fichier PHP existant en utilisant la réflexion</title>
  309. <para>
  310. Vous pouvez ajouter du code <acronym>PHP</acronym> à n'importe quel fichier
  311. <acronym>PHP</acronym> existant à condition d'utiliser la réflexion sur celui-ci
  312. afin de l'analyser. La méthode <methodname>fromReflectedFileName()</methodname>
  313. va vous y aider.
  314. </para>
  315. <programlisting language="php"><![CDATA[
  316. $generator = Zend_CodeGenerator_Php_File::fromReflectedFileName($path);
  317. $body = $generator->getBody();
  318. $body .= "\n\$foo->bar();";
  319. file_put_contents($path, $generator->generate());
  320. ]]></programlisting>
  321. </example>
  322. <example id="zend.codegenerator.examples.reflection-class">
  323. <title>Ajouter du code à une classe PHP existante en utilisant la réflexion</title>
  324. <para>
  325. Vous pouvez aussi ajouter du code à une classe existante.
  326. Utilisez <methodname>fromReflection()</methodname> pour transformer la classe en objet
  327. Reflection. Ajoutez ensuite des méthodes, des attributs, puis régénérez le code de la
  328. classe modifiée&#160;:
  329. </para>
  330. <programlisting language="php"><![CDATA[
  331. $generator = Zend_CodeGenerator_Php_Class::fromReflection(
  332. new Zend_Reflection_Class($class)
  333. );
  334. $generator->setMethod(array(
  335. 'name' => 'setBaz',
  336. 'parameters' => array(
  337. array('name' => 'baz'),
  338. ),
  339. 'body' => '$this->_baz = $baz;' . "\n" . 'return $this;',
  340. 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
  341. 'shortDescription' => 'Set the baz property',
  342. 'tags' => array(
  343. new Zend_CodeGenerator_Php_Docblock_Tag_Param(array(
  344. 'paramName' => 'baz',
  345. 'datatype' => 'string'
  346. )),
  347. new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
  348. 'datatype' => 'string',
  349. )),
  350. ),
  351. )),
  352. ));
  353. $code = $generator->generate();
  354. ]]></programlisting>
  355. </example>
  356. </sect1>