Einführung

Zend_CodeGenerator Beispiele

Example #1 Erzeugung von PHP Klassen

Das folgende Beispiel erzeugt eine leere Klasse mit einem Klassen-level DocBlock.

  1. span style="color: #ff0000;">'shortDescription' => 'Beispiel einer erzeugten Klasse',
  2.     'longDescription'  => 'Das ist eine mit Zend_CodeGenerator '
  3.                         . 'erzeugte Klasse.',
  4.     'tags''name'        => 'version',
  5.             'description' => '$Rev:$''name'        => 'license',
  6.             'description' => 'New BSD',
  7.         ),
  8.     ),
  9. ));
  10. $foo->setName('Foo'

Der obige Code führt zu dem folgenden:

  1. /**
  2. * Beispiel einer erzeugten Klasse
  3. *
  4. * Das ist eine mit Zend_CodeGenerator erzeugte Klasse.
  5. *
  6. * @version $Rev:$
  7. * @license New BSD
  8. *
  9. */

Example #2 Erzeugung von PHP Klassen mit Klassen-Eigenschaften

Aufbauend auf dem vorherigen Beispiel, fügen wir jetzt Eigenschaften in unsere erzeugte Klasse ein.

  1. span style="color: #ff0000;">'shortDescription' => 'Beispiel einer erzeugten Klasse',
  2.     'longDescription'  => 'Das ist eine mit Zend_CodeGenerator '
  3.                         . 'erzeugte Klasse.',
  4.     'tags''name'        => 'version',
  5.             'description' => '$Rev:$''name'        => 'license',
  6.             'description' => 'New BSD',
  7.         ),
  8.     ),
  9. ));
  10. $foo->setName('Foo''name'         => '_bar',
  11.             'visibility'   => 'protected',
  12.             'defaultValue' => 'baz''name'         => 'baz',
  13.             'visibility'   => 'public',
  14.             'defaultValue' => 'bat''name'         => 'bat',
  15.             'const''defaultValue' => 'foobarbazbat'

Das obige führt zu der folgenden Klassen-Definition:

  1. /**
  2. * Beispiel einer erzeugten Klasse
  3. *
  4. * Das ist eine mit Zend_CodeGenerator erzeugte Klasse.
  5. *
  6. * @version $Rev:$
  7. * @license New BSD
  8. *
  9. */'baz''bat';
  10.  
  11.     const bat = 'foobarbazbat';
  12.  
  13. }

Example #3 Erzeugung von PHP Klassen mit Klassen-Methoden

Zend_CodeGenerator_Php_Class erlaubt es Methoden mit optionalem Inhalt zur Klasse hinzuzufügen. Methoden können entweder als Array oder als konkrete Instanzen von Zend_CodeGenerator_Php_Method hinzugefügt werden.

  1. span style="color: #ff0000;">'shortDescription' => 'Beispiel einer erzeugten Klasse',
  2.     'longDescription'  => 'Das ist eine mit Zend_CodeGenerator '
  3.                         . 'erzeugte Klasse.',
  4.     'tags''name'        => 'version',
  5.             'description' => '$Rev:$''name'        => 'license',
  6.             'description' => 'New BSD',
  7.         ),
  8.     ),
  9. ));
  10. $foo->setName('Foo''name'         => '_bar',
  11.             'visibility'   => 'protected',
  12.             'defaultValue' => 'baz''name'         => 'baz',
  13.             'visibility'   => 'public',
  14.             'defaultValue' => 'bat''name'         => 'bat',
  15.             'const''defaultValue' => 'foobarbazbat'// Methoden als Array übergeben
  16. 'name'       => 'setBar',
  17.             'parameters''name' => 'bar'),
  18.             ),
  19.             'body'       => '$this->_bar = $bar;' . "\n" . 'return $this;',
  20.             'docblock''shortDescription' => 'Setzt die bar Eigenschaft',
  21.                 'tags''paramName' => 'bar',
  22.                         'datatype'  => 'string''datatype'  => 'string',
  23.                     )),
  24.                 ),
  25.             )),
  26.         ),
  27.         // Methoden als konkrete Instanz übergeben
  28. 'name' => 'getBar',
  29.             'body'       => 'return $this->_bar;',
  30.             'docblock''shortDescription' => 'Empfängt die bar Eigenschaft',
  31.                 'tags''datatype'  => 'string|null'

Das obige erzeugt die folgende Ausgabe:

  1. /**
  2. * Beispiel einer erzeugten Klasse
  3. *
  4. * Das ist eine mit Zend_CodeGenerator erzeugte Klasse.
  5. *
  6. * @version $Rev:$
  7. * @license New BSD
  8. */'baz''bat';
  9.  
  10.     const bat = 'foobarbazbat';
  11.  
  12.     /**
  13.      * Setzt die bar Eigenschaft
  14.      *
  15.      * @param string bar
  16.      * @return string
  17.      *//**
  18.      * Empfängt die bar Eigenschaft
  19.      *
  20.      * @return string|null
  21.      */

Example #4 Erzeugung von PHP Dateien

Zend_CodeGenerator_Php_File kann verwendet werden um den Inhalt einer PHP Datei zu erzeugen. Man kann Klassen inkludieren als auch eigene Inhalte. Wenn Klassen angegängt werden sollte man entweder eine konkrete Instanz von Zend_CodeGenerator_Php_Class oder ein Array das die Klasse definiert anhängen.

Das folgende Beispiel nimmt an das wir $foo mit einer der Klassen-Definitionen der vorherigen Beispiele definiert haben.

  1. span style="color: #ff0000;">'classes''docblock''shortDescription' => 'Foo Klassen Datei',
  2.         'tags''name'        => 'license',
  3.                 'description' => 'New BSD',
  4.             ),
  5.         ),
  6.     )),
  7.     'body'     => 'define(\'APPLICATION_ENV\', \'testing\');',
  8. ));

Der Aufruf von generate() erzeugt den Code -- schreibt Ihn aber nicht in die Datei. Man muß den Inhalt holen und Ihn selbst in eine Datei schreiben. Als Beispiel:

  1. span style="color: #ff0000;">'Foo.php', $code);

Das obige erzeugt die folgende Datei:

  1. span style="color: #808080; font-style: italic;">/**
  2. * Foo Klassen Datei
  3. *
  4. * @license New BSD
  5. */
  6.  
  7. /**
  8. * Beispiel einer erzeugten Klasse
  9. *
  10. * Das ist eine mit Zend_CodeGenerator erzeugte Klasse.
  11. *
  12. * @version $Rev:$
  13. * @license New BSD
  14. */'baz''bat';
  15.  
  16.     const bat = 'foobarbazbat';
  17.  
  18.     /**
  19.      * Set the bar property
  20.      *
  21.      * @param string bar
  22.      * @return string
  23.      *//**
  24.      * Retrieve the bar property
  25.      *
  26.      * @return string|null
  27.      */'APPLICATION_ENV', 'testing');

Example #5 Sähen der Code Erzeugung einer PHP Datei über Reflection

Man kann PHP Code zu einer existierenden PHP Datei hinzufügen indem der Code Generator verwendet wird. Um das Durchzuführen muß man auf diesem zuerst Reflection ausführen. Die statische Methode fromReflectedFileName() erlaubt es das zu tun.

  1. span style="color: #ff0000;">"\n\$foo->bar();"

Example #6 Sähen der Erzeugung einer PHP Klasse über Reflection

Man kann Code zu einer bestehenden Klasse hinzufügen. Um das Durchzuführen muß die statische fromReflection() 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.

  1. span style="color: #ff0000;">'name'       => 'setBaz',
  2.     'parameters''name' => 'baz'),
  3.     ),
  4.     'body'       => '$this->_baz = $baz;' . "\n" . 'return $this;',
  5.     'docblock''shortDescription' => 'Die baz Eigenschaft setzen',
  6.         'tags''paramName' => 'baz',
  7.                 'datatype'  => 'string''datatype'  => 'string',
  8.             )),
  9.         ),
  10.     )),
  11. ));
  12. $code = $generator->generate();

Einführung