Ejemplo 108. Generando clases PHP
El siguiente ejemplo genera una clase vacía con una clase de nivel DocBlock.
$foo = new Zend_CodeGenerator_Php_Class(); $docblock = new Zend_CodeGenerator_Php_Docblock(array( 'shortDescription' => 'Sample generated class', 'longDescription' => 'This is a class generated with Zend_CodeGenerator.', 'tags' => array( array( 'name' => 'version', 'description' => '$Rev:$', ), array( 'name' => 'license', 'description' => 'New BSD', ), ), )); $foo->setName('Foo') ->setDocblock($docblock); echo $foo->generate();
El código anterior resultará en lo siguiente:
/** * Sample generated class * * This is a class generated with Zend_CodeGenerator. * * @version $Rev:$ * @license New BSD * */ class Foo { }
Ejemplo 109. Generando clases PHP con propiedades de clase
Basándonos en el ejemplo anterior, ahora agreguemos propiedades a nuestra clase generada.
$foo = new Zend_CodeGenerator_Php_Class(); $docblock = new Zend_CodeGenerator_Php_Docblock(array( 'shortDescription' => 'Sample generated class', 'longDescription' => 'This is a class generated with Zend_CodeGenerator.', '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();
Lo anterior resulta en la siguiente definición de clase:
/** * Sample generated class * * This is a class generated with Zend_CodeGenerator. * * @version $Rev:$ * @license New BSD * */ class Foo { protected $_bar = 'baz'; public $baz = 'bat'; const bat = 'foobarbazbat'; }
Ejemplo 110. Generando clases PHP con métodos de clase
Zend_CodeGenerator_Php_Class
le permite
adjuntar métodos con contenido opcional a sus clases. Los métodos
pueden
adjuntarse tanto como arrys o como instancias concretas de
Zend_CodeGenerator_Php_Method
.
$foo = new Zend_CodeGenerator_Php_Class(); $docblock = new Zend_CodeGenerator_Php_Docblock(array( 'shortDescription' => 'Sample generated class', 'longDescription' => 'This is a class generated with Zend_CodeGenerator.', '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( // Método pasado como array array( 'name' => 'setBar', 'parameters' => array( array('name' => 'bar'), ), 'body' => '$this->_bar = $bar;' . "\n" . 'return $this;', 'docblock' => new Zend_CodeGenerator_Php_Docblock(array( 'shortDescription' => 'Set the bar property', 'tags' => array( new Zend_CodeGenerator_Php_Docblock_Tag_Param(array( 'paramName' => 'bar', 'datatype' => 'string' )), new Zend_CodeGenerator_Php_Docblock_Tag_Return(array( 'datatype' => 'string', )), ), )), ), // Método pasado como instancia concreta new Zend_CodeGenerator_Php_Method(array( 'name' => 'getBar', 'body' => 'return $this->_bar;', 'docblock' => new Zend_CodeGenerator_Php_Docblock(array( 'shortDescription' => 'Retrieve the bar property', 'tags' => array( new Zend_CodeGenerator_Php_Docblock_Tag_Return(array( 'datatype' => 'string|null', )), ), )), )), )); echo $foo->generate();
Lo anterior genera la siguiente salida:
/** * Sample generated class * * This is a class generated with Zend_CodeGenerator. * * @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; } }
Ejemplo 111. Generando archivos PHP
Zend_CodeGenerator_Php_File
puede ser
utilizada para generar el contenido de un archivo
PHP
. Usted puede incluir clases, así como el
contenido arbitrario del cuerpo. Cuando acople
clases, debe adjuntar
instancias concretas de
Zend_CodeGenerator_Php_Class
o un array
definiendo la clase.
En el ejemplo siguiente, asumiremos que ha definido
$foo
como una de las definiciones de clase
del ejemplo anterior.
$file = new Zend_CodeGenerator_Php_File(array( 'classes' => array($foo); 'docblock' => new Zend_CodeGenerator_Php_Docblock(array( 'shortDescription' => 'Foo class file', 'tags' => array( array( 'name' => 'license', 'description' => 'New BSD', ), ), )), 'body' => 'define(\'APPLICATION_ENV\', \'testing\');', ));
Llamando a
generate()
generará el código
-- pero no lo grabará en un archivo. Usted mismo deberá capturar y
grabar los contenidos en un archivo. Por ejemplo:
$code = $file->generate(); file_put_contents('Foo.php', $code);
Lo anterior generará el siguiente archivo:
<?php /** * Foo class file * * @license New BSD */ /** * Sample generated class * * This is a class generated with Zend_CodeGenerator. * * @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');
Ejemplo 112. Sembrando la generación de código para un archivo PHP via reflection
You can add
PHP
code to an existing
PHP
file using the code generator. To do so,
you need to first do reflection on it. The
static method
fromReflectedFileName()
allows you to
do this.
$generator = Zend_CodeGenerator_Php_File::fromReflectedFileName($path); $body = $generator->getBody(); $body .= "\n\$foo->bar();"; file_put_contents($path, $generator->generate());
Ejemplo 113. Sembrando la generación de clases PHP via reflection
You may add code to an existing class. To do so, first use the
static
fromReflection()
method to map the
class into a generator object. From there, you may add additional
properties or methods, and then regenerate the class.
$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' => 'Set the baz property', '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();
Ejemplo 114. Sembrando la generación de métodos PHP via reflection
You may add code to an existing class. To do so, first use the
static
fromReflection()
method to map the
class into a generator object. From there, you may add additional
properties or methods, and then regenerate the class.