Zend_CodeGenerator-Examples.xml 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15617 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.codegenerator.examples">
  5. <title>Zend_CodeGenerator Beispiele</title>
  6. <example id="zend.codegenerator.examples.class">
  7. <title>Erzeugung von PHP Klassen</title>
  8. <para>
  9. Das folgende Beispiel erzeugt eine leere Klasse mit einem Klassen-level DocBlock.
  10. </para>
  11. <programlisting language="php"><![CDATA[
  12. $foo = new Zend_CodeGenerator_Php_Class();
  13. $docblock = new Zend_CodeGenerator_Php_Docblock(array(
  14. 'shortDescription' => 'Beispiel einer erzeugten Klasse',
  15. 'longDescription' => 'Das ist eine mit Zend_CodeGenerator '
  16. . 'erzeugte Klasse.',
  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. Der obige Code führt zu dem folgenden:
  34. </para>
  35. <programlisting language="php"><![CDATA[
  36. /**
  37. * Beispiel einer erzeugten Klasse
  38. *
  39. * Das ist eine mit Zend_CodeGenerator erzeugte Klasse.
  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>Erzeugung von PHP Klassen mit Klassen-Eigenschaften</title>
  52. <para>
  53. Aufbauend auf dem vorherigen Beispiel, fügen wir jetzt Eigenschaften in unsere erzeugte
  54. Klasse ein.
  55. </para>
  56. <programlisting language="php"><![CDATA[
  57. $foo = new Zend_CodeGenerator_Php_Class();
  58. $docblock = new Zend_CodeGenerator_Php_Docblock(array(
  59. 'shortDescription' => 'Beispiel einer erzeugten Klasse',
  60. 'longDescription' => 'Das ist eine mit Zend_CodeGenerator '
  61. . 'erzeugte Klasse.',
  62. 'tags' => array(
  63. array(
  64. 'name' => 'version',
  65. 'description' => '$Rev:$',
  66. ),
  67. array(
  68. 'name' => 'license',
  69. 'description' => 'New BSD',
  70. ),
  71. ),
  72. ));
  73. $foo->setName('Foo')
  74. ->setDocblock($docblock)
  75. ->setProperties(array(
  76. array(
  77. 'name' => '_bar',
  78. 'visibility' => 'protected',
  79. 'defaultValue' => 'baz',
  80. ),
  81. array(
  82. 'name' => 'baz',
  83. 'visibility' => 'public',
  84. 'defaultValue' => 'bat',
  85. ),
  86. array(
  87. 'name' => 'bat',
  88. 'const' => true,
  89. 'defaultValue' => 'foobarbazbat',
  90. ),
  91. ));
  92. echo $foo->generate();
  93. ]]></programlisting>
  94. <para>
  95. Das obige führt zu der folgenden Klassen-Definition:
  96. </para>
  97. <programlisting language="php"><![CDATA[
  98. /**
  99. * Beispiel einer erzeugten Klasse
  100. *
  101. * Das ist eine mit Zend_CodeGenerator erzeugte Klasse.
  102. *
  103. * @version $Rev:$
  104. * @license New BSD
  105. *
  106. */
  107. class Foo
  108. {
  109. protected $_bar = 'baz';
  110. public $baz = 'bat';
  111. const bat = 'foobarbazbat';
  112. }
  113. ]]></programlisting>
  114. </example>
  115. <example id="zend.codegenerator.examples.class-methods">
  116. <title>Erzeugung von PHP Klassen mit Klassen-Methoden</title>
  117. <para>
  118. <classname>Zend_CodeGenerator_Php_Class</classname> erlaubt es Methoden mit optionalem
  119. Inhalt zur Klasse hinzuzufügen. Methoden können entweder als Array oder als konkrete
  120. Instanzen von <classname>Zend_CodeGenerator_Php_Method</classname> hinzugefügt werden.
  121. </para>
  122. <programlisting language="php"><![CDATA[
  123. $foo = new Zend_CodeGenerator_Php_Class();
  124. $docblock = new Zend_CodeGenerator_Php_Docblock(array(
  125. 'shortDescription' => 'Beispiel einer erzeugten Klasse',
  126. 'longDescription' => 'Das ist eine mit Zend_CodeGenerator '
  127. . 'erzeugte Klasse.',
  128. 'tags' => array(
  129. array(
  130. 'name' => 'version',
  131. 'description' => '$Rev:$',
  132. ),
  133. array(
  134. 'name' => 'license',
  135. 'description' => 'New BSD',
  136. ),
  137. ),
  138. ));
  139. $foo->setName('Foo')
  140. ->setDocblock($docblock)
  141. ->setProperties(array(
  142. array(
  143. 'name' => '_bar',
  144. 'visibility' => 'protected',
  145. 'defaultValue' => 'baz',
  146. ),
  147. array(
  148. 'name' => 'baz',
  149. 'visibility' => 'public',
  150. 'defaultValue' => 'bat',
  151. ),
  152. array(
  153. 'name' => 'bat',
  154. 'const' => true,
  155. 'defaultValue' => 'foobarbazbat',
  156. ),
  157. ))
  158. ->setMethods(array(
  159. // Methoden als Array übergeben
  160. array(
  161. 'name' => 'setBar',
  162. 'parameters' => array(
  163. array('name' => 'bar'),
  164. ),
  165. 'body' => '$this->_bar = $bar;' . "\n" . 'return $this;',
  166. 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
  167. 'shortDescription' => 'Setzt die bar Eigenschaft',
  168. 'tags' => array(
  169. new Zend_CodeGenerator_Php_Docblock_Tag_Param(array(
  170. 'paramName' => 'bar',
  171. 'datatype' => 'string'
  172. )),
  173. new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
  174. 'datatype' => 'string',
  175. )),
  176. ),
  177. )),
  178. ),
  179. // Methoden als konkrete Instanz übergeben
  180. new Zend_CodeGenerator_Php_Method(array(
  181. 'name' => 'getBar',
  182. 'body' => 'return $this->_bar;',
  183. 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
  184. 'shortDescription' => 'Empfängt die bar Eigenschaft',
  185. 'tags' => array(
  186. new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
  187. 'datatype' => 'string|null',
  188. )),
  189. ),
  190. )),
  191. )),
  192. ));
  193. echo $foo->generate();
  194. ]]></programlisting>
  195. <para>
  196. Das obige erzeugt die folgende Ausgabe:
  197. </para>
  198. <programlisting language="php"><![CDATA[
  199. /**
  200. * Beispiel einer erzeugten Klasse
  201. *
  202. * Das ist eine mit Zend_CodeGenerator erzeugte Klasse.
  203. *
  204. * @version $Rev:$
  205. * @license New BSD
  206. */
  207. class Foo
  208. {
  209. protected $_bar = 'baz';
  210. public $baz = 'bat';
  211. const bat = 'foobarbazbat';
  212. /**
  213. * Setzt die bar Eigenschaft
  214. *
  215. * @param string bar
  216. * @return string
  217. */
  218. public function setBar($bar)
  219. {
  220. $this->_bar = $bar;
  221. return $this;
  222. }
  223. /**
  224. * Empfängt die bar Eigenschaft
  225. *
  226. * @return string|null
  227. */
  228. public function getBar()
  229. {
  230. return $this->_bar;
  231. }
  232. }
  233. ]]></programlisting>
  234. </example>
  235. <example id="zend.codegenerator.examples.file">
  236. <title>Erzeugung von PHP Dateien</title>
  237. <para>
  238. <classname>Zend_CodeGenerator_Php_File</classname> kann verwendet werden um den Inhalt
  239. einer PHP Datei zu erzeugen. Man kann Klassen inkludieren als auch eigene Inhalte. Wenn
  240. Klassen angegängt werden sollte man entweder eine konkrete Instanz von
  241. <classname>Zend_CodeGenerator_Php_Class</classname> oder ein Array das die Klasse
  242. definiert anhängen.
  243. </para>
  244. <para>
  245. Das folgende Beispiel nimmt an das wir <code>$foo</code> mit einer der
  246. Klassen-Definitionen der vorherigen Beispiele definiert haben.
  247. </para>
  248. <programlisting language="php"><![CDATA[
  249. $file = new Zend_CodeGenerator_Php_File(array(
  250. 'classes' => array($foo);
  251. 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
  252. 'shortDescription' => 'Foo Klassen Datei',
  253. 'tags' => array(
  254. array(
  255. 'name' => 'license',
  256. 'description' => 'New BSD',
  257. ),
  258. ),
  259. )),
  260. 'body' => 'define(\'APPLICATION_ENV\', \'testing\');',
  261. ));
  262. ]]></programlisting>
  263. <para>
  264. Der Aufruf von <code>generate()</code> erzeugt den Code -- schreibt Ihn aber nicht in
  265. die Datei. Man muß den Inhalt holen und Ihn selbst in eine Datei schreiben. Als
  266. Beispiel:
  267. </para>
  268. <programlisting language="php"><![CDATA[
  269. $code = $file->generate();
  270. file_put_contents('Foo.php', $code);
  271. ]]></programlisting>
  272. <para>
  273. Das obige erzeugt die folgende Datei:
  274. </para>
  275. <programlisting language="php"><![CDATA[
  276. <?php
  277. /**
  278. * Foo Klassen Datei
  279. *
  280. * @license New BSD
  281. */
  282. /**
  283. * Beispiel einer erzeugten Klasse
  284. *
  285. * Das ist eine mit Zend_CodeGenerator erzeugte Klasse.
  286. *
  287. * @version $Rev:$
  288. * @license New BSD
  289. */
  290. class Foo
  291. {
  292. protected $_bar = 'baz';
  293. public $baz = 'bat';
  294. const bat = 'foobarbazbat';
  295. /**
  296. * Set the bar property
  297. *
  298. * @param string bar
  299. * @return string
  300. */
  301. public function setBar($bar)
  302. {
  303. $this->_bar = $bar;
  304. return $this;
  305. }
  306. /**
  307. * Retrieve the bar property
  308. *
  309. * @return string|null
  310. */
  311. public function getBar()
  312. {
  313. return $this->_bar;
  314. }
  315. }
  316. define('APPLICATION_ENV', 'testing');
  317. ]]></programlisting>
  318. </example>
  319. <example id="zend.codegenerator.examples.reflection-file">
  320. <title>Sähen der Code Erzeugung einer PHP Datei über Reflection</title>
  321. <para>
  322. Man kann PHP Code zu einer existierenden PHP Datei hinzufügen indem der Code
  323. Generator verwendet wird. Um das Durchzuführen muß man auf diesem zuerst Reflection
  324. ausführen. Die statische Methode <code>fromReflectedFileName()</code> erlaubt es
  325. das zu tun.
  326. </para>
  327. <programlisting language="php"><![CDATA[
  328. $generator = Zend_CodeGenerator_Php_File::fromReflectedFileName($path);
  329. $body = $generator->getBody();
  330. $body .= "\n\$foo->bar();";
  331. file_put_contents($path, $generator->generate());
  332. ]]></programlisting>
  333. </example>
  334. <example id="zend.codegenerator.examples.reflection-class">
  335. <title>Sähen der Erzeugung einer PHP Klasse über Reflection</title>
  336. <para>
  337. Man kann Code zu einer bestehenden Klasse hinzufügen. Um das Durchzuführen muß die
  338. statiche <code>fromReflection()</code> Methode verwendet werden um die Klasse in ein
  339. Generator Objekt zu mappen. Von dort, kann man zusätzliche Eigenschaften oder Methoden
  340. hinzufügen und die Klasse neu erstellen.
  341. </para>
  342. <programlisting language="php"><![CDATA[
  343. $generator = Zend_CodeGenerator_Php_Class::fromReflection(
  344. new Zend_Reflection_Class($class)
  345. );
  346. $generator->setMethod(array(
  347. 'name' => 'setBaz',
  348. 'parameters' => array(
  349. array('name' => 'baz'),
  350. ),
  351. 'body' => '$this->_baz = $baz;' . "\n" . 'return $this;',
  352. 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
  353. 'shortDescription' => 'Die baz Eigenschaft setzen',
  354. 'tags' => array(
  355. new Zend_CodeGenerator_Php_Docblock_Tag_Param(array(
  356. 'paramName' => 'baz',
  357. 'datatype' => 'string'
  358. )),
  359. new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
  360. 'datatype' => 'string',
  361. )),
  362. ),
  363. )),
  364. ));
  365. $code = $generator->generate();
  366. ]]></programlisting>
  367. </example>
  368. </sect1>