1 <?xml version="1.0" encoding="UTF-8"?>
3 <!-- EN-Revision: 20765 -->
4 <sect1 id="zend.codegenerator.examples">
5 <title>Zend_CodeGeneratorサンプル</title>
7 <example id="zend.codegenerator.examples.class">
8 <title>PHPクラスを生成</title>
11 下記の例ではクラスレベルのDocBlock付きで空のクラスを生成します。
14 <programlisting language="php"><![CDATA[
15 $foo = new Zend_CodeGenerator_Php_Class();
16 $docblock = new Zend_CodeGenerator_Php_Docblock(array(
17 'shortDescription' => '生成されたクラスサンプル',
18 'longDescription' => 'これはZend_CodeGeneratorで生成されたクラスです。',
22 'description' => '$Rev:$',
26 'description' => 'New BSD',
31 ->setDocblock($docblock);
32 echo $foo->generate();
39 <programlisting language="php"><![CDATA[
43 * これはZend_CodeGeneratorで生成されたクラスです。
56 <example id="zend.codegenerator.examples.class-properties">
57 <title>クラスのプロパティ付でPHPクラスを生成</title>
60 では、前の例を基にして、生成したクラスにプロパティを加えます。
63 <programlisting language="php"><![CDATA[
64 $foo = new Zend_CodeGenerator_Php_Class();
65 $docblock = new Zend_CodeGenerator_Php_Docblock(array(
66 'shortDescription' => '生成されたクラスサンプル',
67 'longDescription' => 'これはZend_CodeGeneratorで生成されたクラスです。',
71 'description' => '$Rev:$',
75 'description' => 'New BSD',
80 ->setDocblock($docblock)
81 ->setProperties(array(
84 'visibility' => 'protected',
85 'defaultValue' => 'baz',
89 'visibility' => 'public',
90 'defaultValue' => 'bat',
95 'defaultValue' => 'foobarbazbat',
98 echo $foo->generate();
102 上記の結果は下記のクラス定義になります。:
105 <programlisting language="php"><![CDATA[
109 * これはZend_CodeGeneratorで生成されたクラスです。
118 protected $_bar = 'baz';
122 const bat = 'foobarbazbat';
128 <example id="zend.codegenerator.examples.class-methods">
129 <title>クラスのメソッド付でPHPクラスを生成</title>
132 <classname>Zend_CodeGenerator_Php_Class</classname>のおかげで、
133 クラスにオプションのコンテンツと一緒にメソッドを付与できます。
134 メソッドは、配列かまたは具体的な<classname>Zend_CodeGenerator_Php_Method</classname>インスタンスとして付与されるかもしれません。
137 <programlisting language="php"><![CDATA[
138 $foo = new Zend_CodeGenerator_Php_Class();
139 $docblock = new Zend_CodeGenerator_Php_Docblock(array(
140 'shortDescription' => '生成されたクラスサンプル',
141 'longDescription' => 'これはZend_CodeGeneratorで生成されたクラスです。',
145 'description' => '$Rev:$',
149 'description' => 'New BSD',
154 ->setDocblock($docblock)
155 ->setProperties(array(
158 'visibility' => 'protected',
159 'defaultValue' => 'baz',
163 'visibility' => 'public',
164 'defaultValue' => 'bat',
169 'defaultValue' => 'foobarbazbat',
176 'parameters' => array(
177 array('name' => 'bar'),
179 'body' => '$this->_bar = $bar;' . "\n" . 'return $this;',
180 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
181 'shortDescription' => 'barプロパティーを設定',
183 new Zend_CodeGenerator_Php_Docblock_Tag_Param(array(
184 'paramName' => 'bar',
185 'datatype' => 'string'
187 new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
188 'datatype' => 'string',
193 // メソッドは具体的なインスタンスとして渡されます
194 new Zend_CodeGenerator_Php_Method(array(
196 'body' => 'return $this->_bar;',
197 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
198 'shortDescription' => 'barプロパティーを取得',
200 new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
201 'datatype' => 'string|null',
208 echo $foo->generate();
215 <programlisting language="php"><![CDATA[
219 * これはZend_CodeGeneratorで生成されたクラスです。
227 protected $_bar = 'baz';
231 const bat = 'foobarbazbat';
239 public function setBar($bar)
248 * @return string|null
250 public function getBar()
259 <example id="zend.codegenerator.examples.file">
260 <title>PHPファイルの生成</title>
263 <classname>Zend_CodeGenerator_Php_File</classname>は<acronym>PHP</acronym>ファイルのコンテンツ生成でも使えます。
264 あなたは、任意のコンテンツ本体だけでなくクラスを含めることができます。
265 クラスを付与するとき、具体的な<classname>Zend_CodeGenerator_Php_Class</classname>インスタンスか、
266 またはクラスを定めている配列を添付しなければなりません。
270 下記の例では、前述の例のクラス定義の1つにつき<varname>$foo</varname>を定義したと仮定します。
273 <programlisting language="php"><![CDATA[
274 $file = new Zend_CodeGenerator_Php_File(array(
275 'classes' => array($foo);
276 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
277 'shortDescription' => 'Fooクラスファイル',
281 'description' => 'New BSD',
285 'body' => 'define(\'APPLICATION_ENV\', \'testing\');',
290 <methodname>generate()</methodname>を呼び出すとコードを生成します。
292 コンテンツを捕まえて、自分自身で書き出す必要があります。
296 <programlisting language="php"><![CDATA[
297 $code = $file->generate();
298 file_put_contents('Foo.php', $code);
305 <programlisting language="php"><![CDATA[
316 * これはZend_CodeGeneratorで生成されたクラスです。
324 protected $_bar = 'baz';
328 const bat = 'foobarbazbat';
336 public function setBar($bar)
345 * @return string|null
347 public function getBar()
354 define('APPLICATION_ENV', 'testing');
358 <example id="zend.codegenerator.examples.reflection-file">
359 <title>reflection経由のPHPファイルのコード生成の種まき</title>
363 既存の<acronym>PHP</acronym>ファイルに<acronym>PHP</acronym>コードを加えることができます。
364 そうするためには、まずそれにたいしてreflectionを実行する必要があります。
365 静的メソッド<methodname>fromReflectedFileName()</methodname>によりこれを実行できます。
368 <programlisting language="php"><![CDATA[
369 $generator = Zend_CodeGenerator_Php_File::fromReflectedFileName($path);
370 $body = $generator->getBody();
371 $body .= "\n\$foo->bar();";
372 file_put_contents($path, $generator->generate());
376 <example id="zend.codegenerator.examples.reflection-class">
377 <title>reflection経由のPHPクラス生成の種まき</title>
380 コード・ジェネレーターを使って、既存のPHPファイルにPHPコードを加えることができます。
381 そうするために、最初にクラスをジェネレーター・オブジェクトにマップするために、
382 静的メソッド<methodname>fromReflection()</methodname>を使ってください。
383 そこから追加のプロパティまたはメソッドを加えて、そしてクラスを再生成するでしょう。
386 <programlisting language="php"><![CDATA[
387 $generator = Zend_CodeGenerator_Php_Class::fromReflection(
388 new Zend_Reflection_Class($class)
390 $generator->setMethod(array(
392 'parameters' => array(
393 array('name' => 'baz'),
395 'body' => '$this->_baz = $baz;' . "\n" . 'return $this;',
396 'docblock' => new Zend_CodeGenerator_Php_Docblock(array(
397 'shortDescription' => 'bazプロパティーを設定',
399 new Zend_CodeGenerator_Php_Docblock_Tag_Param(array(
400 'paramName' => 'baz',
401 'datatype' => 'string'
403 new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
404 'datatype' => 'string',
409 $code = $generator->generate();