忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/08/20 11:22 |
ZF1.11 Zend_CodeGenerator
コードジェネレータ
自動でプログラム作ってくれるの?仕事が楽になるね!やったね!

と思ったかどうかはわかりませんが、実際問題としてZend_CodeGeneratorは自動プログラミングの一種と言えるかというと全然言えません。

ちょっと試しに使ってみましょう。
<?php
	header('Content-type: text/html; charset=UTF-8');
	require_once('Zend/CodeGenerator/Php/Class.php');
	
	//クラス
		$class = new Zend_CodeGenerator_Php_Class();
		$class->setName('Hoge');
	
	//ドキュメント
		$docblock = new Zend_CodeGenerator_Php_Docblock(array(
			 'shortDescription' => 'クラスサンプル'
			,'longDescription'  => 'これはZend_CodeGeneratorで生成されたクラスです。'
		));
		$class->setDocblock($docblock);
	
	//プロパティ
		$property1 = new Zend_CodeGenerator_Php_Property();
		$property1->setName('property1');
		$property1->setDefaultValue('value1');
		$class->setProperty($property1);
		
		$class->setProperty(array(
			'name'=>'property2', 'defaultValue'=>'value2', 'static'=>true, 'visibility'=>'private'
		));
		
	//メソッド
		$method1 = new Zend_CodeGenerator_Php_Method();
		$method1->setName('method1');
		$method1Param1 = new Zend_CodeGenerator_Php_Parameter();
		$method1Param1->setType('string');
		$method1Param1->setName('param1');
		$method1Param1->setDefaultValue('default');
		$method1Param2 = new Zend_CodeGenerator_Php_Parameter();
		$method1Param2->setType('int');
		$method1Param2->setName('param2');
		$method1Param2->setDefaultValue( new Zend_CodeGenerator_Php_Parameter_DefaultValue("null"));
		$method1->setParameters(array($method1Param1, $method1Param2));
		
		$class->setMethods(array($method1));
		
	//完成したクラス
		print($class->generate());
以上の記述で、できあがるのが下のクラス。
/**
 * クラスサンプル
 *
 * これはZend_CodeGeneratorで生成されたクラスです。
 */
class Hoge
{
    public $property1 = 'value1';
    private static $property2 = 'value2';
    public function method1(string $param1 = 'default', int $param2 = null)
    {
    }
}
うん、まあなんだそのちょっと待て。

上のソースはわざと丁寧に書いており、実際にはメソッドチェーンが効いたり値を配列で纏めて設定できたりもするのですが、それでもインプットよりアウトプットのほうが張るかに小さくなるという結果は揺るぎません。
コードジェネレータを使って楽をしようという試みはほとんど無謀ということがわかるかと思います。

ではこれは何のためにあるのかというと、要はzf create projectとかsymfony generate:projectみたいなものです。
というかzf create projectは実際にZend_CodeGeneratorを使っています。
PR


2011/11/21 22:16 | Comments(0) | TrackBack(0) | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<Minecraft 1.8.1 MOD紹介 チェストをパワーアップするMOD | HOME | 買ったものリスト 2011/11/20>>
忍者ブログ[PR]