Zend_CodeGeneratorサンプル
下記の例ではクラスレベルのDocBlock付きで空のクラスを生成します。
span style="color: #ff0000;">'shortDescription' => '生成されたクラスサンプル',
'longDescription' => 'これはZend_CodeGeneratorで生成されたクラスです。',
'tags''name' => 'version',
'description' => '$Rev:$''name' => 'license',
'description' => 'New BSD',
),
),
));
$foo->setName('Foo'
/**
* 生成されたクラスサンプル
*
* これはZend_CodeGeneratorで生成されたクラスです。
*
* @version $Rev:$
* @license New BSD
*
*/
Example #2 クラスのプロパティ付でPHPクラスを生成
では、前の例を基にして、生成したクラスにプロパティを加えます。
span style="color: #ff0000;">'shortDescription' => '生成されたクラスサンプル',
'longDescription' => 'これはZend_CodeGeneratorで生成されたクラスです。',
'tags''name' => 'version',
'description' => '$Rev:$''name' => 'license',
'description' => 'New BSD',
),
),
));
$foo->setName('Foo''name' => '_bar',
'visibility' => 'protected',
'defaultValue' => 'baz''name' => 'baz',
'visibility' => 'public',
'defaultValue' => 'bat''name' => 'bat',
'const''defaultValue' => 'foobarbazbat'
/**
* 生成されたクラスサンプル
*
* これはZend_CodeGeneratorで生成されたクラスです。
*
* @version $Rev:$
* @license New BSD
*
*/'baz''bat';
const bat = 'foobarbazbat';
}
Example #3 クラスのメソッド付でPHPクラスを生成
Zend_CodeGenerator_Php_Classのおかげで、
クラスにオプションのコンテンツと一緒にメソッドを付与できます。
メソッドは、配列かまたは具体的なZend_CodeGenerator_Php_Methodインスタンスとして付与されるかもしれません。
span style="color: #ff0000;">'shortDescription' => '生成されたクラスサンプル',
'longDescription' => 'これはZend_CodeGeneratorで生成されたクラスです。',
'tags''name' => 'version',
'description' => '$Rev:$''name' => 'license',
'description' => 'New BSD',
),
),
));
$foo->setName('Foo''name' => '_bar',
'visibility' => 'protected',
'defaultValue' => 'baz''name' => 'baz',
'visibility' => 'public',
'defaultValue' => 'bat''name' => 'bat',
'const''defaultValue' => 'foobarbazbat'// メソッドは配列として渡されます
'name' => 'setBar',
'parameters''name' => 'bar'),
),
'body' => '$this->_bar = $bar;' . "\n" . 'return $this;',
'docblock''shortDescription' => 'barプロパティーを設定',
'tags''paramName' => 'bar',
'datatype' => 'string''datatype' => 'string',
)),
),
)),
),
// メソッドは具体的なインスタンスとして渡されます
'name' => 'getBar',
'body' => 'return $this->_bar;',
'docblock''shortDescription' => 'barプロパティーを取得',
'tags''datatype' => 'string|null'
/**
* 生成されたクラスサンプル
*
* これはZend_CodeGeneratorで生成されたクラスです。
*
* @version $Rev:$
* @license New BSD
*/'baz''bat';
const bat = 'foobarbazbat';
/**
* barプロパティーを設定
*
* @param string bar
* @return string
*//**
* barプロパティーを取得
*
* @return string|null
*/
Zend_CodeGenerator_Php_FileはPHPファイルのコンテンツ生成でも使えます。
あなたは、任意のコンテンツ本体だけでなくクラスを含めることができます。
クラスを付与するとき、具体的なZend_CodeGenerator_Php_Classインスタンスか、
またはクラスを定めている配列を添付しなければなりません。
下記の例では、前述の例のクラス定義の1つにつき$fooを定義したと仮定します。
span style="color: #ff0000;">'classes''docblock''shortDescription' => 'Fooクラスファイル',
'tags''name' => 'license',
'description' => 'New BSD',
),
),
)),
'body' => 'define(\'APPLICATION_ENV\', \'testing\');',
));
generate()を呼び出すとコードを生成します。
しかし、ファイルに書き出しません。
コンテンツを捕まえて、自分自身で書き出す必要があります。
その例です。:
span style="color: #ff0000;">'Foo.php', $code);
span style="color: #808080; font-style: italic;">/**
* Fooクラスファイル
*
* @license New BSD
*/
/**
* 生成されたクラスサンプル
*
* これはZend_CodeGeneratorで生成されたクラスです。
*
* @version $Rev:$
* @license New BSD
*/'baz''bat';
const bat = 'foobarbazbat';
/**
* barプロパティーを設定
*
* @param string bar
* @return string
*//**
* barプロパティーを取得
*
* @return string|null
*/'APPLICATION_ENV', 'testing');
Example #5 reflection経由のPHPファイルのコード生成の種まき
コード・ジェネレーターを使って、
既存のPHPファイルにPHPコードを加えることができます。
そうするためには、まずそれにたいしてreflectionを実行する必要があります。
静的メソッド fromReflectedFileName()によりこれを実行できます。
span style="color: #ff0000;">"\n\$foo->bar();"
Example #6 reflection経由のPHPクラス生成の種まき
コード・ジェネレーターを使って、既存のPHPファイルにPHPコードを加えることができます。
そうするために、最初にクラスをジェネレーター・オブジェクトにマップするために、
静的メソッド fromReflection()を使ってください。
そこから追加のプロパティまたはメソッドを加えて、そしてクラスを再生成するでしょう。
span style="color: #ff0000;">'name' => 'setBaz',
'parameters''name' => 'baz'),
),
'body' => '$this->_baz = $baz;' . "\n" . 'return $this;',
'docblock''shortDescription' => 'bazプロパティーを設定',
'tags''paramName' => 'baz',
'datatype' => 'string''datatype' => 'string',
)),
),
)),
));
$code = $generator->generate();
|
|