| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.codegenerator.examples">
- <title>Zend_CodeGenerator Beispiele</title>
- <example id="zend.codegenerator.examples.class">
- <title>Erzeugung von PHP Klassen</title>
- <para>
- Das folgende Beispiel erzeugt eine leere Klasse mit einem Klassen-level DocBlock.
- </para>
- <programlisting language="php"><![CDATA[
- $foo = new Zend_CodeGenerator_Php_Class();
- $docblock = new Zend_CodeGenerator_Php_Docblock(array(
- 'shortDescription' => 'Beispiel einer erzeugten Klasse',
- 'longDescription' => 'Das ist eine mit Zend_CodeGenerator '
- . 'erzeugte Klasse.',
- 'tags' => array(
- array(
- 'name' => 'version',
- 'description' => '$Rev:$',
- ),
- array(
- 'name' => 'license',
- 'description' => 'New BSD',
- ),
- ),
- ));
- $foo->setName('Foo')
- ->setDocblock($docblock);
- echo $foo->generate();
- ]]></programlisting>
- <para>
- Der obige Code führt zu dem folgenden:
- </para>
- <programlisting language="php"><![CDATA[
- /**
- * Beispiel einer erzeugten Klasse
- *
- * Das ist eine mit Zend_CodeGenerator erzeugte Klasse.
- *
- * @version $Rev:$
- * @license New BSD
- *
- */
- class Foo
- {
- }
- ]]></programlisting>
- </example>
- <example id="zend.codegenerator.examples.class-properties">
- <title>Erzeugung von PHP Klassen mit Klassen-Eigenschaften</title>
- <para>
- Aufbauend auf dem vorherigen Beispiel, fügen wir jetzt Eigenschaften in unsere erzeugte
- Klasse ein.
- </para>
- <programlisting language="php"><![CDATA[
- $foo = new Zend_CodeGenerator_Php_Class();
- $docblock = new Zend_CodeGenerator_Php_Docblock(array(
- 'shortDescription' => 'Beispiel einer erzeugten Klasse',
- 'longDescription' => 'Das ist eine mit Zend_CodeGenerator '
- . 'erzeugte Klasse.',
- 'tags' => array(
- array(
- 'name' => 'version',
- 'description' => '$Rev:$',
- ),
- array(
- 'name' => 'license',
- 'description' => 'New BSD',
- ),
- ),
- ));
- $foo->setName('Foo')
- ->setDocblock($docblock)
- ->setProperties(array(
- array(
- 'name' => '_bar',
- 'visibility' => 'protected',
- 'defaultValue' => 'baz',
- ),
- array(
- 'name' => 'baz',
- 'visibility' => 'public',
- 'defaultValue' => 'bat',
- ),
- array(
- 'name' => 'bat',
- 'const' => true,
- 'defaultValue' => 'foobarbazbat',
- ),
- ));
- echo $foo->generate();
- ]]></programlisting>
- <para>
- Das obige führt zu der folgenden Klassen-Definition:
- </para>
- <programlisting language="php"><![CDATA[
- /**
- * Beispiel einer erzeugten Klasse
- *
- * Das ist eine mit Zend_CodeGenerator erzeugte Klasse.
- *
- * @version $Rev:$
- * @license New BSD
- *
- */
- class Foo
- {
- protected $_bar = 'baz';
- public $baz = 'bat';
- const bat = 'foobarbazbat';
- }
- ]]></programlisting>
- </example>
- <example id="zend.codegenerator.examples.class-methods">
- <title>Erzeugung von PHP Klassen mit Klassen-Methoden</title>
- <para>
- <classname>Zend_CodeGenerator_Php_Class</classname> erlaubt es Methoden mit optionalem
- Inhalt zur Klasse hinzuzufügen. Methoden können entweder als Array oder als konkrete
- Instanzen von <classname>Zend_CodeGenerator_Php_Method</classname> hinzugefügt werden.
- </para>
- <programlisting language="php"><![CDATA[
- $foo = new Zend_CodeGenerator_Php_Class();
- $docblock = new Zend_CodeGenerator_Php_Docblock(array(
- 'shortDescription' => 'Beispiel einer erzeugten Klasse',
- 'longDescription' => 'Das ist eine mit Zend_CodeGenerator '
- . 'erzeugte Klasse.',
- 'tags' => array(
- array(
- 'name' => 'version',
- 'description' => '$Rev:$',
- ),
- array(
- 'name' => 'license',
- 'description' => 'New BSD',
- ),
- ),
- ));
- $foo->setName('Foo')
- ->setDocblock($docblock)
- ->setProperties(array(
- array(
- 'name' => '_bar',
- 'visibility' => 'protected',
- 'defaultValue' => 'baz',
- ),
- array(
- 'name' => 'baz',
- 'visibility' => 'public',
- 'defaultValue' => 'bat',
- ),
- array(
- 'name' => 'bat',
- 'const' => true,
- 'defaultValue' => 'foobarbazbat',
- ),
- ))
- ->setMethods(array(
- // Methoden als Array übergeben
- array(
- 'name' => 'setBar',
- 'parameters' => array(
- array('name' => 'bar'),
- ),
- 'body' => '$this->_bar = $bar;' . "\n" . 'return $this;',
- 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
- 'shortDescription' => 'Setzt die bar Eigenschaft',
- 'tags' => array(
- new Zend_CodeGenerator_Php_Docblock_Tag_Param(array(
- 'paramName' => 'bar',
- 'datatype' => 'string'
- )),
- new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
- 'datatype' => 'string',
- )),
- ),
- )),
- ),
- // Methoden als konkrete Instanz übergeben
- new Zend_CodeGenerator_Php_Method(array(
- 'name' => 'getBar',
- 'body' => 'return $this->_bar;',
- 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
- 'shortDescription' => 'Empfängt die bar Eigenschaft',
- 'tags' => array(
- new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
- 'datatype' => 'string|null',
- )),
- ),
- )),
- )),
- ));
- echo $foo->generate();
- ]]></programlisting>
- <para>
- Das obige erzeugt die folgende Ausgabe:
- </para>
- <programlisting language="php"><![CDATA[
- /**
- * Beispiel einer erzeugten Klasse
- *
- * Das ist eine mit Zend_CodeGenerator erzeugte Klasse.
- *
- * @version $Rev:$
- * @license New BSD
- */
- class Foo
- {
- protected $_bar = 'baz';
- public $baz = 'bat';
- const bat = 'foobarbazbat';
- /**
- * Setzt die bar Eigenschaft
- *
- * @param string bar
- * @return string
- */
- public function setBar($bar)
- {
- $this->_bar = $bar;
- return $this;
- }
- /**
- * Empfängt die bar Eigenschaft
- *
- * @return string|null
- */
- public function getBar()
- {
- return $this->_bar;
- }
- }
- ]]></programlisting>
- </example>
- <example id="zend.codegenerator.examples.file">
- <title>Erzeugung von PHP Dateien</title>
- <para>
- <classname>Zend_CodeGenerator_Php_File</classname> kann verwendet werden um den Inhalt
- einer <acronym>PHP</acronym> Datei zu erzeugen. Man kann Klassen inkludieren als auch
- eigene Inhalte. Wenn Klassen angegängt werden sollte man entweder eine konkrete Instanz
- von <classname>Zend_CodeGenerator_Php_Class</classname> oder ein Array das die Klasse
- definiert anhängen.
- </para>
- <para>
- Das folgende Beispiel nimmt an das wir <varname>$foo</varname> mit einer der
- Klassen-Definitionen der vorherigen Beispiele definiert haben.
- </para>
- <programlisting language="php"><![CDATA[
- $file = new Zend_CodeGenerator_Php_File(array(
- 'classes' => array($foo);
- 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
- 'shortDescription' => 'Foo Klassen Datei',
- 'tags' => array(
- array(
- 'name' => 'license',
- 'description' => 'New BSD',
- ),
- ),
- )),
- 'body' => 'define(\'APPLICATION_ENV\', \'testing\');',
- ));
- ]]></programlisting>
- <para>
- Der Aufruf von <methodname>generate()</methodname> erzeugt den Code -- schreibt Ihn
- aber nicht in die Datei. Man muß den Inhalt holen und Ihn selbst in eine Datei
- schreiben. Als Beispiel:
- </para>
- <programlisting language="php"><![CDATA[
- $code = $file->generate();
- file_put_contents('Foo.php', $code);
- ]]></programlisting>
- <para>
- Das obige erzeugt die folgende Datei:
- </para>
- <programlisting language="php"><![CDATA[
- <?php
- /**
- * Foo Klassen Datei
- *
- * @license New BSD
- */
- /**
- * Beispiel einer erzeugten Klasse
- *
- * Das ist eine mit Zend_CodeGenerator erzeugte Klasse.
- *
- * @version $Rev:$
- * @license New BSD
- */
- class Foo
- {
- protected $_bar = 'baz';
- public $baz = 'bat';
- const bat = 'foobarbazbat';
- /**
- * Set the bar property
- *
- * @param string bar
- * @return string
- */
- public function setBar($bar)
- {
- $this->_bar = $bar;
- return $this;
- }
- /**
- * Retrieve the bar property
- *
- * @return string|null
- */
- public function getBar()
- {
- return $this->_bar;
- }
- }
- define('APPLICATION_ENV', 'testing');
- ]]></programlisting>
- </example>
- <example id="zend.codegenerator.examples.reflection-file">
- <title>Sähen der Code Erzeugung einer PHP Datei über Reflection</title>
- <para>
- Man kann <acronym>PHP</acronym> Code zu einer existierenden <acronym>PHP</acronym>
- Datei hinzufügen indem der Code Generator verwendet wird. Um das Durchzuführen muß man
- auf diesem zuerst Reflection ausführen. Die statische Methode
- <methodname>fromReflectedFileName()</methodname> erlaubt es das zu tun.
- </para>
- <programlisting language="php"><![CDATA[
- $generator = Zend_CodeGenerator_Php_File::fromReflectedFileName($path);
- $body = $generator->getBody();
- $body .= "\n\$foo->bar();";
- file_put_contents($path, $generator->generate());
- ]]></programlisting>
- </example>
- <example id="zend.codegenerator.examples.reflection-class">
- <title>Sähen der Erzeugung einer PHP Klasse über Reflection</title>
- <para>
- Man kann Code zu einer bestehenden Klasse hinzufügen. Um das Durchzuführen muß die
- statische <methodname>fromReflection()</methodname> Methode verwendet werden um die
- Klasse in ein Generator Objekt zu mappen. Von dort, kann man zusätzliche Eigenschaften
- oder Methoden hinzufügen und die Klasse neu erstellen.
- </para>
- <programlisting language="php"><![CDATA[
- $generator = Zend_CodeGenerator_Php_Class::fromReflection(
- new Zend_Reflection_Class($class)
- );
- $generator->setMethod(array(
- 'name' => 'setBaz',
- 'parameters' => array(
- array('name' => 'baz'),
- ),
- 'body' => '$this->_baz = $baz;' . "\n" . 'return $this;',
- 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
- 'shortDescription' => 'Die baz Eigenschaft setzen',
- 'tags' => array(
- new Zend_CodeGenerator_Php_Docblock_Tag_Param(array(
- 'paramName' => 'baz',
- 'datatype' => 'string'
- )),
- new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
- 'datatype' => 'string',
- )),
- ),
- )),
- ));
- $code = $generator->generate();
- ]]></programlisting>
- </example>
- </sect1>
|