Zend Framework の紹介

 Learning Zend Framework

appendix

 Zend Framework リファレンス


  • 第36章 Zend_Gdata
  • 第37章 Zend_Http
  • 第38章 Zend_InfoCard
  • 第39章 Zend_Json
  • 第40章 Zend_Layout
  • 第41章 Zend_Ldap
  • 第42章 Zend_Loader
  • 第43章 Zend_Locale
  • 第44章 Zend_Log
  • 第45章 Zend_Mail
  • 第46章 Zend_Markup
  • 第47章 Zend_Measure
  • 第48章 Zend_Memory
  • 第49章 Zend_Mime
  • 第50章 Zend_Navigation
  • 第51章 Zend_Oauth
  • 第52章 Zend_OpenId
  • 第53章 Zend_Paginator
  • 第54章 Zend_Pdf
  • 第55章 Zend_ProgressBar
  • 第56章 Zend_Queue
  • 第57章 Zend_Reflection
  • 第58章 Zend_Registry
  • 第59章 Zend_Rest

  • 第60章 Zend_Search_Lucene
  • 第61章 Zend_Serializer
  • 第62章 Zend_Server
  • 第63章 Zend_Service
  • 第64章 Zend_Session
  • 第65章 Zend_Soap
  • 第66章 Zend_Tag
  • 第67章 Zend_Test
  • 第68章 Zend_Text
  • 第69章 Zend_TimeSync
  • 第70章 Zend_Tool
  • 第71章 Zend_Tool_Framework
  • 第72章 Zend_Tool_Project
  • 第73章 Zend_Translate
  • 第74章 Zend_Uri
  • 第75章 Zend_Validate
  • 第76章 Zend_Version
  • 第77章 Zend_View
  • 第78章 Zend_Wildfire
  • 第79章 Zend_XmlRpc
  • ZendX_Console_Process_Unix
  • ZendX_JQuery
  • Translation 70.6% Update 2010-11-28 - Revision 23415

    第20章 Zend_CodeGenerator

    20.1. 導入

    Zend_CodeGeneratorは、 新しいコードを作成するばかりではなく、既存のコードを更新するためにも、 オブジェクト指向インターフェースを用いた任意のコードを生成する機能を提供します。 現在の実装はPHPコードを生成することに限られますが、 他の仕事のためのコード生成をさせるために基底クラスを簡単に拡張することができます: JavaScript、設定ファイル、apache vhosts、その他。

    20.1.1. Theory of Operation

    最も代表的な使用例では、単にコード・ジェネレーター・クラスのインスタンスを生成して、 それに適切な設定を渡すか、またはインスタンス化のあと設定します。 コードを生成するために、単にオブジェクトをechoするか、 そのgenerate()メソッドを呼びます。

    //構成をコンストラクタに渡す
    $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!\';',
                    )),
                ),
            )),
        )
    ));

    //インスタンス化のあと設定
    $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);

    //生成されたファイルのレンダリング
    echo $file;

    //またはファイルへの書き出し:
    file_put_contents('World.php'$file->generate());

    上記のサンプルは両方とも同じ結果でレンダリングされます:

    <?php

    class World
    {

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

    }

    もう一つの一般的な使用例は、既存のコードを更新することです。 たとえばメソッドをクラスに加えるために。 この場合には、最初にreflectionを用いて既存のコードを調べて、 次に新しいメソッドを加えなければいけません。 Zend_Reflectionを導入することによって、 Zend_CodeGeneratorはつまらないほどこれを単純にします。

    例えば、上記をファイル"World.php"に保存して、すでにincludeしたとしましょう。 それから下記のようにできます。

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

    //生成されたファイルのレンダリング
    echo $file;

    //または、より良いですが、元のファイルに書き戻します。:
    file_put_contents('World.php'$file->generate());

    クラスファイルの結果はこのようになります:

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