Introducción a Zend Framework

 Aprendiendo Zend Framework

Apéndice

 Referencia de Zend Framework


  • Zend_Gdata
  • Zend_Http
  • Zend_InfoCard
  • Zend_Json
  • Zend_Layout
  • Zend_Ldap
  • Zend_Loader
  • Zend_Locale
  • Zend_Log
  • Zend_Mail
  • Zend_Markup
  • Zend_Measure
  • Zend_Memory
  • Zend_Mime
  • Zend_Navigation
  • Zend_Oauth
  • Zend_OpenId
  • Zend_Paginator
  • Zend_Pdf
  • Zend_ProgressBar
  • Zend_Queue
  • Zend_Reflection
  • Zend_Registry
  • Zend_Rest

  • Zend_Search_Lucene
  • Zend_Serializer
  • Zend_Server
  • Zend_Service
  • Zend_Session
  • Zend_Soap
  • Zend_Tag
  • Zend_Test
  • Zend_Text
  • Zend_TimeSync
  • Zend_Tool
  • Zend_Tool_Framework
  • Zend_Tool_Project
  • Zend_Translate
  • Zend_Uri
  • Zend_Validate
  • Zend_Version
  • Zend_View
  • Zend_Wildfire
  • Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Traducción al 26.9% - Actualizado el 2011-11-16 - Revisión 24249 - Versión ZF 1.11.x

    20.2. Ejemplos de Zend_CodeGenerator

    Ejemplo 20.1. 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 20.2. 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 20.3. 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 20.4. 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 20.5. 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 20.6. 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 20.7. 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.


    digg delicious meneame google twitter technorati facebook

    Comentarios

    Loading...