導入

Zend_CodeGeneratorサンプル

Example #1 PHPクラスを生成

下記の例ではクラスレベルのDocBlock付きで空のクラスを生成します。

  1. span style="color: #ff0000;">'shortDescription' => '生成されたクラスサンプル',
  2.     'longDescription'  => 'これはZend_CodeGeneratorで生成されたクラスです。',
  3.     'tags''name'        => 'version',
  4.             'description' => '$Rev:$''name'        => 'license',
  5.             'description' => 'New BSD',
  6.         ),
  7.     ),
  8. ));
  9. $foo->setName('Foo'

上記のコードは下記の結果になります。:

  1. /**
  2. * 生成されたクラスサンプル
  3. *
  4. * これはZend_CodeGeneratorで生成されたクラスです。
  5. *
  6. * @version $Rev:$
  7. * @license New BSD
  8. *
  9. */

Example #2 クラスのプロパティ付でPHPクラスを生成

では、前の例を基にして、生成したクラスにプロパティを加えます。

  1. span style="color: #ff0000;">'shortDescription' => '生成されたクラスサンプル',
  2.     'longDescription'  => 'これはZend_CodeGeneratorで生成されたクラスです。',
  3.     'tags''name'        => 'version',
  4.             'description' => '$Rev:$''name'        => 'license',
  5.             'description' => 'New BSD',
  6.         ),
  7.     ),
  8. ));
  9. $foo->setName('Foo''name'         => '_bar',
  10.             'visibility'   => 'protected',
  11.             'defaultValue' => 'baz''name'         => 'baz',
  12.             'visibility'   => 'public',
  13.             'defaultValue' => 'bat''name'         => 'bat',
  14.             'const''defaultValue' => 'foobarbazbat'

上記の結果は下記のクラス定義になります。:

  1. /**
  2. * 生成されたクラスサンプル
  3. *
  4. * これはZend_CodeGeneratorで生成されたクラスです。
  5. *
  6. * @version $Rev:$
  7. * @license New BSD
  8. *
  9. */'baz''bat';
  10.  
  11.     const bat = 'foobarbazbat';
  12.  
  13. }

Example #3 クラスのメソッド付でPHPクラスを生成

Zend_CodeGenerator_Php_Classのおかげで、 クラスにオプションのコンテンツと一緒にメソッドを付与できます。 メソッドは、配列かまたは具体的なZend_CodeGenerator_Php_Methodインスタンスとして付与されるかもしれません。

  1. span style="color: #ff0000;">'shortDescription' => '生成されたクラスサンプル',
  2.     'longDescription'  => 'これはZend_CodeGeneratorで生成されたクラスです。',
  3.     'tags''name'        => 'version',
  4.             'description' => '$Rev:$''name'        => 'license',
  5.             'description' => 'New BSD',
  6.         ),
  7.     ),
  8. ));
  9. $foo->setName('Foo''name'         => '_bar',
  10.             'visibility'   => 'protected',
  11.             'defaultValue' => 'baz''name'         => 'baz',
  12.             'visibility'   => 'public',
  13.             'defaultValue' => 'bat''name'         => 'bat',
  14.             'const''defaultValue' => 'foobarbazbat'// メソッドは配列として渡されます
  15. 'name'       => 'setBar',
  16.             'parameters''name' => 'bar'),
  17.             ),
  18.             'body'       => '$this->_bar = $bar;' . "\n" . 'return $this;',
  19.             'docblock''shortDescription' => 'barプロパティーを設定',
  20.                 'tags''paramName' => 'bar',
  21.                         'datatype'  => 'string''datatype'  => 'string',
  22.                     )),
  23.                 ),
  24.             )),
  25.         ),
  26.         // メソッドは具体的なインスタンスとして渡されます
  27. 'name' => 'getBar',
  28.             'body'       => 'return $this->_bar;',
  29.             'docblock''shortDescription' => 'barプロパティーを取得',
  30.                 'tags''datatype'  => 'string|null'

上記のコードは下記の出力になります。:

  1. /**
  2. * 生成されたクラスサンプル
  3. *
  4. * これはZend_CodeGeneratorで生成されたクラスです。
  5. *
  6. * @version $Rev:$
  7. * @license New BSD
  8. */'baz''bat';
  9.  
  10.     const bat = 'foobarbazbat';
  11.  
  12.     /**
  13.      * barプロパティーを設定
  14.      *
  15.      * @param string bar
  16.      * @return string
  17.      *//**
  18.      * barプロパティーを取得
  19.      *
  20.      * @return string|null
  21.      */

Example #4 PHPファイルの生成

Zend_CodeGenerator_Php_FilePHPファイルのコンテンツ生成でも使えます。 あなたは、任意のコンテンツ本体だけでなくクラスを含めることができます。 クラスを付与するとき、具体的なZend_CodeGenerator_Php_Classインスタンスか、 またはクラスを定めている配列を添付しなければなりません。

下記の例では、前述の例のクラス定義の1つにつき$fooを定義したと仮定します。

  1. span style="color: #ff0000;">'classes''docblock''shortDescription' => 'Fooクラスファイル',
  2.         'tags''name'        => 'license',
  3.                 'description' => 'New BSD',
  4.             ),
  5.         ),
  6.     )),
  7.     'body'     => 'define(\'APPLICATION_ENV\', \'testing\');',
  8. ));

generate()を呼び出すとコードを生成します。 しかし、ファイルに書き出しません。 コンテンツを捕まえて、自分自身で書き出す必要があります。 その例です。:

  1. span style="color: #ff0000;">'Foo.php', $code);

上記は下記のファイルを生成します:

  1. span style="color: #808080; font-style: italic;">/**
  2. * Fooクラスファイル
  3. *
  4. * @license New BSD
  5. */
  6.  
  7. /**
  8. * 生成されたクラスサンプル
  9. *
  10. * これはZend_CodeGeneratorで生成されたクラスです。
  11. *
  12. * @version $Rev:$
  13. * @license New BSD
  14. */'baz''bat';
  15.  
  16.     const bat = 'foobarbazbat';
  17.  
  18.     /**
  19.      * barプロパティーを設定
  20.      *
  21.      * @param string bar
  22.      * @return string
  23.      *//**
  24.      * barプロパティーを取得
  25.      *
  26.      * @return string|null
  27.      */'APPLICATION_ENV', 'testing');

Example #5 reflection経由のPHPファイルのコード生成の種まき

コード・ジェネレーターを使って、 既存のPHPファイルにPHPコードを加えることができます。 そうするためには、まずそれにたいしてreflectionを実行する必要があります。 静的メソッド fromReflectedFileName()によりこれを実行できます。

  1. span style="color: #ff0000;">"\n\$foo->bar();"

Example #6 reflection経由のPHPクラス生成の種まき

コード・ジェネレーターを使って、既存のPHPファイルにPHPコードを加えることができます。 そうするために、最初にクラスをジェネレーター・オブジェクトにマップするために、 静的メソッド fromReflection()を使ってください。 そこから追加のプロパティまたはメソッドを加えて、そしてクラスを再生成するでしょう。

  1. span style="color: #ff0000;">'name'       => 'setBaz',
  2.     'parameters''name' => 'baz'),
  3.     ),
  4.     'body'       => '$this->_baz = $baz;' . "\n" . 'return $this;',
  5.     'docblock''shortDescription' => 'bazプロパティーを設定',
  6.         'tags''paramName' => 'baz',
  7.                 'datatype'  => 'string''datatype'  => 'string',
  8.             )),
  9.         ),
  10.     )),
  11. ));
  12. $code = $generator->generate();

導入