コードジェネレータ?
自動でプログラム作ってくれるの?仕事が楽になるね!やったね!
と思ったかどうかはわかりませんが、実際問題としてZend_CodeGeneratorは自動プログラミングの一種と言えるかというと全然言えません。
ちょっと試しに使ってみましょう。
以上の記述で、できあがるのが下のクラス。
うん、まあなんだそのちょっと待て。
上のソースはわざと丁寧に書いており、実際にはメソッドチェーンが効いたり値を配列で纏めて設定できたりもするのですが、それでもインプットよりアウトプットのほうが張るかに小さくなるという結果は揺るぎません。
コードジェネレータを使って楽をしようという試みはほとんど無謀ということがわかるかと思います。
ではこれは何のためにあるのかというと、要はzf create projectとかsymfony generate:projectみたいなものです。
というかzf create projectは実際にZend_CodeGeneratorを使っています。
PR
自動でプログラム作ってくれるの?仕事が楽になるね!やったね!
と思ったかどうかはわかりませんが、実際問題としてZend_CodeGeneratorは自動プログラミングの一種と言えるかというと全然言えません。
ちょっと試しに使ってみましょう。
01 | <?php |
02 | header( 'Content-type: text/html; charset=UTF-8' ); |
03 | require_once ( 'Zend/CodeGenerator/Php/Class.php' ); |
04 | |
05 | //クラス |
06 | $class = new Zend_CodeGenerator_Php_Class(); |
07 | $class ->setName( 'Hoge' ); |
08 | |
09 | //ドキュメント |
10 | $docblock = new Zend_CodeGenerator_Php_Docblock( array ( |
11 | 'shortDescription' => 'クラスサンプル' |
12 | , 'longDescription' => 'これはZend_CodeGeneratorで生成されたクラスです。' |
13 | )); |
14 | $class ->setDocblock( $docblock ); |
15 | |
16 | //プロパティ |
17 | $property1 = new Zend_CodeGenerator_Php_Property(); |
18 | $property1 ->setName( 'property1' ); |
19 | $property1 ->setDefaultValue( 'value1' ); |
20 | $class ->setProperty( $property1 ); |
21 | |
22 | $class ->setProperty( array ( |
23 | 'name' => 'property2' , 'defaultValue' => 'value2' , 'static' =>true, 'visibility' => 'private' |
24 | )); |
25 | |
26 | //メソッド |
27 | $method1 = new Zend_CodeGenerator_Php_Method(); |
28 | $method1 ->setName( 'method1' ); |
29 | $method1Param1 = new Zend_CodeGenerator_Php_Parameter(); |
30 | $method1Param1 ->setType( 'string' ); |
31 | $method1Param1 ->setName( 'param1' ); |
32 | $method1Param1 ->setDefaultValue( 'default' ); |
33 | $method1Param2 = new Zend_CodeGenerator_Php_Parameter(); |
34 | $method1Param2 ->setType( 'int' ); |
35 | $method1Param2 ->setName( 'param2' ); |
36 | $method1Param2 ->setDefaultValue( new Zend_CodeGenerator_Php_Parameter_DefaultValue( "null" )); |
37 | $method1 ->setParameters( array ( $method1Param1 , $method1Param2 )); |
38 | |
39 | $class ->setMethods( array ( $method1 )); |
40 | |
41 | //完成したクラス |
42 | print( $class ->generate()); |
01 | /** |
02 | * クラスサンプル |
03 | * |
04 | * これはZend_CodeGeneratorで生成されたクラスです。 |
05 | */ |
06 | class Hoge |
07 | { |
08 | public $property1 = 'value1' ; |
09 | private static $property2 = 'value2' ; |
10 | public function method1(string $param1 = 'default' , int $param2 = null) |
11 | { |
12 | } |
13 | } |
上のソースはわざと丁寧に書いており、実際にはメソッドチェーンが効いたり値を配列で纏めて設定できたりもするのですが、それでもインプットよりアウトプットのほうが張るかに小さくなるという結果は揺るぎません。
コードジェネレータを使って楽をしようという試みはほとんど無謀ということがわかるかと思います。
ではこれは何のためにあるのかというと、要はzf create projectとかsymfony generate:projectみたいなものです。
というかzf create projectは実際にZend_CodeGeneratorを使っています。
トラックバック
トラックバックURL: