Zend_CodeGenerator-Examples.xml 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15103 -->
  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 role="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 role="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 role="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 role="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 Inhalt
  119. zur Klasse hinzuzufügen. Methoden können entweder als Array oder als konkrete Instanzen
  120. von <classname>Zend_CodeGenerator_Php_Method</classname> hinzugefügt werden.
  121. </para>
  122. <programlisting role="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 role="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 einer PHP
  239. Datei zu erzeugen. Man kann Klassen inkludieren als auch eigene Inhalte. Wenn Klassen
  240. angegängt werden sollte man entweder eine konkrete Instanz von
  241. <classname>Zend_CodeGenerator_Php_Class</classname> oder ein Array das die Klasse definiert
  242. 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 role="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 role="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 role="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></para>
  322. <!-- @todo -->
  323. </example>
  324. <example id="zend.codegenerator.examples.reflection-class">
  325. <title>Sähen der Erzeugung einer PHP Klasse über Reflection</title>
  326. <para></para>
  327. <!-- @todo -->
  328. </example>
  329. <example id="zend.codegenerator.examples.reflection-method">
  330. <title>Sähen der Erzeugung einer PHP Methode über Reflection</title>
  331. <para></para>
  332. <!-- @todo -->
  333. </example>
  334. </sect1>