| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.codegenerator.introduction">
- <title>Einführung</title>
- <para>
- <classname>Zend_CodeGenerator</classname> bietet die Möglichkeit jeglichen Code zu erstellen
- indem ein Objekt Orientiertes Interface verwendet wird, um sowohl neuen Code zu erstellen
- als auch bestehenden Code upzudaten. Wärend die aktuelle Implementation darin limitiert ist
- <acronym>PHP</acronym> Code zu erstellen, kann die Basisklasse einfach erweitert werden um
- Code Erzeugung für andere Zwecke zu bieten: JavaScript, Konfigurationsdateien, Apache
- VHosts, usw.
- </para>
- <sect2 id="zend.codegenerator.introduction.theory">
- <title>Theorie der Anwendung</title>
- <para>
- Der typischste Fall ist die Instanzierung einer Code Erzeugungs Klasse und entweder der
- Übergabe der entsprechenden Konfiguration oder der Konfiguration nach dessen
- Erstellung. Um Code zu erstellen, muß man einfach das Objekt ausgeben, oder dessen
- <methodname>generate()</methodname> Methode aufrufen.
- </para>
- <programlisting language="php"><![CDATA[
- // Konfiguration an den Construktor übergeben:
- $file = new Zend_CodeGenerator_Php_File(array(
- 'classes' => array(
- new Zend_CodeGenerator_Php_Class(array(
- 'name' => 'World',
- 'methods' => array(
- new Zend_CodeGenerator_Php_Method(array(
- 'name' => 'hello',
- 'body' => 'echo \'Hallo Welt!\';',
- )),
- ),
- )),
- )
- ));
- // Konfiguration nach der Initialisierung
- $method = new Zend_CodeGenerator_Php_Method();
- $method->setName('hello')
- ->setBody('echo \'Hallo Welt!\';');
- $class = new Zend_CodeGenerator_Php_Class();
- $class->setName('World')
- ->setMethod($method);
- $file = new Zend_CodeGenerator_Php_File();
- $file->setClass($class);
- // Die erzeugte Datei darstellen
- echo $file;
- // oder Sie in eine Datei schreiben:
- file_put_contents('World.php', $file->generate());
- ]]></programlisting>
- <para>
- Beide der obigen Beispiele werden das gleiche Ergebnis darstellen:
- </para>
- <programlisting language="php"><![CDATA[
- <?php
- class World
- {
- public function hello()
- {
- echo 'Hallo Welt!';
- }
- }
- ]]></programlisting>
- <para>
- Ein anderer üblicher Anwendungsfall ist die Aktualisierung von bestehendem Code -- zum
- Beispiel eine Methode zu einer Klasse hinzufügen. In so einem Fall, muß man zuerst
- den bestehenden Code betrachten, indem Reflection verwendet wird, und dann die neue
- Methode hinzufügen. <classname>Zend_CodeGenerator</classname> macht das sehr trivial,
- indem <link linkend="zend.reflection">Zend_Reflection</link> verwendet wird.
- </para>
- <para>
- Als Beispiel nehmen wir an dass das obige in der Datei "<filename>World.php</filename>"
- abgespeichert wurde, und wir diese bereits inkludiert haben. Wir könnten dann das
- folgende tun:
- </para>
- <programlisting language="php"><![CDATA[
- $class = Zend_CodeGenerator_Php_Class::fromReflection(
- new Zend_Reflection_Class('World')
- );
- $method = new Zend_CodeGenerator_Php_Method();
- $method->setName('mrMcFeeley')
- ->setBody('echo \'Hallo, Mr. McFeeley!\';');
- $class->setMethod($method);
- $file = new Zend_CodeGenerator_Php_File();
- $file->setClass($class);
- // Die erzeugte Datei darstellen
- echo $file;
- // Oder besser, es in die originale Datei zurückschreiben:
- file_put_contents('World.php', $file->generate());
- ]]></programlisting>
- <para>
- Die resultierende Klasse würde wie folgt aussehen:
- </para>
- <programlisting language="php"><![CDATA[
- <?php
- class World
- {
- public function hello()
- {
- echo 'Hallo Welt!';
- }
- public function mrMcFeeley()
- {
- echo 'Hallo, Mr. McFeeley!';
- }
- }
- ]]></programlisting>
- </sect2>
- </sect1>
|