Zend_CodeGenerator Beispiele
Erzeugung von PHP Klassen
Das folgende Beispiel erzeugt eine leere Klasse mit einem Klassen-level DocBlock.
'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();
]]>
Der obige Code führt zu dem folgenden:
Erzeugung von PHP Klassen mit Klassen-Eigenschaften
Aufbauend auf dem vorherigen Beispiel, fügen wir jetzt Eigenschaften in unsere erzeugte
Klasse ein.
'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();
]]>
Das obige führt zu der folgenden Klassen-Definition:
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.
'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();
]]>
Das obige erzeugt die folgende Ausgabe:
_bar = $bar;
return $this;
}
/**
* Empfängt die bar Eigenschaft
*
* @return string|null
*/
public function getBar()
{
return $this->_bar;
}
}
]]>
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.
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\');',
));
]]>
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:
generate();
file_put_contents('Foo.php', $code);
]]>
Das obige erzeugt die folgende Datei:
_bar = $bar;
return $this;
}
/**
* Retrieve the bar property
*
* @return string|null
*/
public function getBar()
{
return $this->_bar;
}
}
define('APPLICATION_ENV', 'testing');
]]>
Sähen der Code Erzeugung einer PHP Datei über Reflection
Sähen der Erzeugung einer PHP Klasse über Reflection
Sähen der Erzeugung einer PHP Methode über Reflection