Introduction au Zend Framework

 Apprendre Zend Framework

appendix

 Guide de référence 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
  • Translation 61.2% Update 2010-11-28 - Revision 23149 - Version ZF 1.11.x

    Chapitre 20. Zend_CodeGenerator

    20.1. Introduction

    Zend_CodeGenerator est un outils permettant de générer du code PHP en utilisant une interface orientée objet. Il peut générer ou mettre à jour du code. Il est aussi possible d'étendre ces classes afin de changer le langage de référence pour générer du Javascript, des hôtes virtuels Apache ..., par exemple.

    20.1.1. Théorie

    Dans la plupart des cas, vous créerez une instance du générateur de code, et vous le configurez. Pour afficher le code généré, un simple echo suffira, ou l'appel à sa méthode generate().

    // Passage de configuration au 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!\';',
                    )),
                ),
            )),
        )
    ));

    // Configuration après instanciation
    $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);

    // Rendu du fichier généré:
    echo $file;

    // 2criture du fichier généré:
    file_put_contents('World.php'$file->generate());

    Les 2 exemples ci-dessus vont rendre le même résultat :

    <?php

    class World
    {

        public function 
    hello()
        {
            echo 
    'Hello world!';
        }

    }

    Il est aussi possible de mettre à jour un code existant, par exemple, ajouter une méthode à une classe. Dans ce cas, vous devez inspecter le code existant en utilisant la réflexion, puis ajouter une nouvelle méthode. Zend_CodeGenerator rend ceci très simple en utilisant Zend_Reflection.

    Par exemple, imaginons que nous avons sauvegardé le code de l'exemple ci-dessus dans un fichier "World.php" que nous avons alors inclus. Nous pourrions dès lors agir comme suit :

    $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);

    // Rendu du code généré
    echo $file;

    // Ou encore sauvegarde par dessus l'ancien fichier
    file_put_contents('World.php'$file->generate());

    La nouvelle classe ressemblera à ça :

    <?php

    class World
    {

        public function 
    hello()
        {
            echo 
    'Hello world!';
        }

        public function 
    mrMcFeeley()
        {
            echo 
    'Hellow Mr. McFeeley!';
        }

    }
    digg delicious meneame google twitter technorati facebook

    Comments

    Loading...