Zend_CodeGenerator-Examples.xml 11 KB

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