# Introducción

`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.

## Teoría de Operación

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!';
        }

    }