Zend_CodeGenerator-Introduction.xml 4.0 KB

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