Zend_CodeGenerator
ofrece facilidades para
generar código arbitrario usando una interfaz orientada a objetos,
tanto
para crear código nuevo como para actualizar código existente.
Mientras que la
implementación actual se limita a generar código
PHP
,
usted fácilmente puede extender la clase base a fin de proveer
generación de código para
otras tareas como: JavaScript, archivos de
configuración, apache vhost, etc.
En el caso de uso más típico, simplemente instanciará una clase de
generación de código y
podrá pasarle tanto la configuración adecuada
o configurarla después de la instanciación.
Para generar el código,
simplemente haga "echo" del objeto o llame a su método
generate()
.
// Pasando la configuración al constructor: $file = new Zend_CodeGenerator_Php_File(array( 'classes' => array( new Zend_CodeGenerator_Php_Class(array( 'name' => 'World', 'methods' => array( new Zend_CodeGenerator_Php_Method(array( 'name' => 'hello', 'body' => 'echo \'Hello world!\';', )), ), )), ) )); // Configurando después de la instanciación $method = new Zend_CodeGenerator_Php_Method(); $method->setName('hello') ->setBody('echo \'Hello world!\';'); $class = new Zend_CodeGenerator_Php_Class(); $class->setName('World') ->setMethod($method); $file = new Zend_CodeGenerator_Php_File(); $file->setClass($class); // Mostrar el archivo generado echo $file; // o grabarlo a un archivo: file_put_contents('World.php', $file->generate());
Ambos ejemplos anteriores mostrarán el mismo resultado:
<?php class World { public function hello() { echo 'Hello world!'; } }
Otro caso de uso común es actualizar el código actual -- por ejemplo,
para añadir un
método a una clase. En ese caso, primero debe
inspeccionar el código actual utilizando
reflexión, y entonces
añadir su nuevo método.
Zend_CodeGenerator
lo hace trivialmente simple,
aprovechando
Zend_Reflection
.
Como ejemplo, digamos que hemos grabado lo anterior al archivo
"
World.php
", y que ya está incluído. Podríamos entonces hacer lo
siguiente:
$class = Zend_CodeGenerator_Php_Class::fromReflection( new Zend_Reflection_Class('World') ); $method = new Zend_CodeGenerator_Php_Method(); $method->setName('mrMcFeeley') ->setBody('echo \'Hello, Mr. McFeeley!\';'); $class->setMethod($method); $file = new Zend_CodeGenerator_Php_File(); $file->setClass($class); // Mostrar el archivo generado echo $file; // O mejor aún, volver a grabarlo al archivo original: file_put_contents('World.php', $file->generate());
El archivo de la clase resultante se vería así:
<?php class World { public function hello() { echo 'Hello world!'; } public function mrMcFeeley() { echo 'Hellow Mr. McFeeley!'; } }