Zend_CodeGenerator-Introduction.xml 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15998 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.codegenerator.introduction">
  5. <title>Einführung</title>
  6. <para>
  7. <classname>Zend_CodeGenerator</classname>
  8. bietet die Möglichkeit jeglichen Code zu erstellen
  9. indem ein Objekt Orientiertes Interface verwendet wird, um sowohl neuen
  10. Code zu erstellen
  11. als auch bestehenden Code upzudaten. Wärend die aktuelle Implementation
  12. darin limitiert ist
  13. <acronym>PHP</acronym>
  14. Code zu erstellen, kann die Basisklasse einfach erweitert werden um
  15. Code Erzeugung für andere Zwecke zu bieten: JavaScript,
  16. Konfigurationsdateien, Apache
  17. VHosts, usw.
  18. </para>
  19. <sect2 id="zend.codegenerator.introduction.theory">
  20. <title>Theorie der Anwendung</title>
  21. <para>
  22. Der typischste Fall ist die Instanzierung einer Code Erzeugungs
  23. Klasse und entweder der
  24. Übergabe der entsprechenden Konfiguration oder der Konfiguration nach dessen
  25. Erstellung. Um Code zu erstellen, muß man einfach das Objekt
  26. ausgeben, oder dessen
  27. <methodname>generate()</methodname>
  28. Methode aufrufen.
  29. </para>
  30. <programlisting language="php"><![CDATA[
  31. // Konfiguration an den Construktor übergeben:
  32. $file = new Zend_CodeGenerator_Php_File(array(
  33. 'classes' => array(
  34. new Zend_CodeGenerator_Php_Class(array(
  35. 'name' => 'World',
  36. 'methods' => array(
  37. new Zend_CodeGenerator_Php_Method(array(
  38. 'name' => 'hello',
  39. 'body' => 'echo \'Hallo Welt!\';',
  40. )),
  41. ),
  42. )),
  43. )
  44. ));
  45. // Konfiguration nach der Initialisierung
  46. $method = new Zend_CodeGenerator_Php_Method();
  47. $method->setName('hello')
  48. ->setBody('echo \'Hallo Welt!\';');
  49. $class = new Zend_CodeGenerator_Php_Class();
  50. $class->setName('World')
  51. ->setMethod($method);
  52. $file = new Zend_CodeGenerator_Php_File();
  53. $file->setClass($class);
  54. // Die erzeugte Datei darstellen
  55. echo $file;
  56. // oder Sie in eine Datei schreiben:
  57. file_put_contents('World.php', $file->generate());
  58. ]]></programlisting>
  59. <para>
  60. Beide der obigen Beispiele werden das gleiche Ergebnis darstellen:
  61. </para>
  62. <programlisting language="php"><![CDATA[
  63. <?php
  64. class World
  65. {
  66. public function hello()
  67. {
  68. echo 'Hallo Welt!';
  69. }
  70. }
  71. ]]></programlisting>
  72. <para>
  73. Ein anderer üblicher Anwendungsfall ist die Aktualisierung von
  74. bestehendem Code -- zum
  75. Beispiel eine Methode zu einer Klasse hinzufügen. In so einem Fall, muß man
  76. zuerst
  77. den bestehenden Code betrachten, indem Reflection verwendet wird, und
  78. dann die neue
  79. Methode hinzufügen.
  80. <classname>Zend_CodeGenerator</classname>
  81. macht das sehr trivial,
  82. indem
  83. <link linkend="zend.reflection">Zend_Reflection</link>
  84. verwendet wird.
  85. </para>
  86. <para>
  87. Als Beispiel nehmen wir an dass das obige in der Datei "
  88. <filename>World.php</filename>
  89. "
  90. abgespeichert wurde, und wir diese bereits inkludiert haben. Wir könnten dann das
  91. folgende tun:
  92. </para>
  93. <programlisting language="php"><![CDATA[
  94. $class = Zend_CodeGenerator_Php_Class::fromReflection(
  95. new Zend_Reflection_Class('World')
  96. );
  97. $method = new Zend_CodeGenerator_Php_Method();
  98. $method->setName('mrMcFeeley')
  99. ->setBody('echo \'Hallo, Mr. McFeeley!\';');
  100. $class->setMethod($method);
  101. $file = new Zend_CodeGenerator_Php_File();
  102. $file->setClass($class);
  103. // Die erzeugte Datei darstellen
  104. echo $file;
  105. // Oder besser, es in die originale Datei zurückschreiben:
  106. file_put_contents('World.php', $file->generate());
  107. ]]></programlisting>
  108. <para>
  109. Die resultierende Klasse würde wie folgt aussehen:
  110. </para>
  111. <programlisting language="php"><![CDATA[
  112. <?php
  113. class World
  114. {
  115. public function hello()
  116. {
  117. echo 'Hallo Welt!';
  118. }
  119. public function mrMcFeeley()
  120. {
  121. echo 'Hallo, Mr. McFeeley!';
  122. }
  123. }
  124. ]]></programlisting>
  125. </sect2>
  126. </sect1>