Ejemplos de Zend_CodeGenerator
Generando clases PHP
El siguiente ejemplo genera una clase vacía con una clase de nivel
DocBlock.
'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:
Generando clases PHP con propiedades de clase
Basándonos en el ejemplo anterior, ahora agreguemos propiedades a
nuestra clase generada.
'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:
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.
'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:
_bar = $bar;
return $this;
}
/**
* Retrieve the bar property
*
* @return string|null
*/
public function getBar()
{
return $this->_bar;
}
}
]]>
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.
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:
generate();
file_put_contents('Foo.php', $code);
]]>
Lo anterior generará el siguiente archivo:
_bar = $bar;
return $this;
}
/**
* Retrieve the bar property
*
* @return string|null
*/
public function getBar()
{
return $this->_bar;
}
}
define('APPLICATION_ENV', 'testing');
]]>
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.
getBody();
$body .= "\n\$foo->bar();";
file_put_contents($path, $generator->generate());
]]>
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.
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();
]]>
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.