[ZF-10089] Zend_Log
[zend.git] / documentation / manual / ja / module_specs / Zend_CodeGenerator-Examples.xml
blob598a4e5ccfba2b99534b30eeff52cf93c32a1e8c
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!-- Reviewed: no -->
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>
10         <para>
11             下記の例ではクラスレベルのDocBlock付きで空のクラスを生成します。
12         </para>
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で生成されたクラスです。',
19     'tags'             => array(
20         array(
21             'name'        => 'version',
22             'description' => '$Rev:$',
23         ),
24         array(
25             'name'        => 'license',
26             'description' => 'New BSD',
27         ),
28     ),
29 ));
30 $foo->setName('Foo')
31     ->setDocblock($docblock);
32 echo $foo->generate();
33 ]]></programlisting>
35         <para>
36             上記のコードは下記の結果になります。:
37         </para>
39         <programlisting language="php"><![CDATA[
40 /**
41  * 生成されたクラスサンプル
42  *
43  * これはZend_CodeGeneratorで生成されたクラスです。
44  *
45  * @version $Rev:$
46  * @license New BSD
47  *
48  */
49 class Foo
53 ]]></programlisting>
54     </example>
56     <example id="zend.codegenerator.examples.class-properties">
57         <title>クラスのプロパティ付でPHPクラスを生成</title>
59         <para>
60             では、前の例を基にして、生成したクラスにプロパティを加えます。
61         </para>
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で生成されたクラスです。',
68     'tags'             => array(
69         array(
70             'name'        => 'version',
71             'description' => '$Rev:$',
72         ),
73         array(
74             'name'        => 'license',
75             'description' => 'New BSD',
76         ),
77     ),
78 ));
79 $foo->setName('Foo')
80     ->setDocblock($docblock)
81     ->setProperties(array(
82         array(
83             'name'         => '_bar',
84             'visibility'   => 'protected',
85             'defaultValue' => 'baz',
86         ),
87         array(
88             'name'         => 'baz',
89             'visibility'   => 'public',
90             'defaultValue' => 'bat',
91         ),
92         array(
93             'name'         => 'bat',
94             'const'        => true,
95             'defaultValue' => 'foobarbazbat',
96         ),
97     ));
98 echo $foo->generate();
99 ]]></programlisting>
101         <para>
102             上記の結果は下記のクラス定義になります。:
103         </para>
105         <programlisting language="php"><![CDATA[
107  * 生成されたクラスサンプル
109  * これはZend_CodeGeneratorで生成されたクラスです。
111  * @version $Rev:$
112  * @license New BSD
114  */
115 class Foo
118     protected $_bar = 'baz';
120     public $baz = 'bat';
122     const bat = 'foobarbazbat';
125 ]]></programlisting>
126     </example>
128     <example id="zend.codegenerator.examples.class-methods">
129         <title>クラスのメソッド付でPHPクラスを生成</title>
131         <para>
132             <classname>Zend_CodeGenerator_Php_Class</classname>のおかげで、
133             クラスにオプションのコンテンツと一緒にメソッドを付与できます。
134             メソッドは、配列かまたは具体的な<classname>Zend_CodeGenerator_Php_Method</classname>インスタンスとして付与されるかもしれません。
135         </para>
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で生成されたクラスです。',
142     'tags'             => array(
143         array(
144             'name'        => 'version',
145             'description' => '$Rev:$',
146         ),
147         array(
148             'name'        => 'license',
149             'description' => 'New BSD',
150         ),
151     ),
153 $foo->setName('Foo')
154     ->setDocblock($docblock)
155     ->setProperties(array(
156         array(
157             'name'         => '_bar',
158             'visibility'   => 'protected',
159             'defaultValue' => 'baz',
160         ),
161         array(
162             'name'         => 'baz',
163             'visibility'   => 'public',
164             'defaultValue' => 'bat',
165         ),
166         array(
167             'name'         => 'bat',
168             'const'        => true,
169             'defaultValue' => 'foobarbazbat',
170         ),
171     ))
172     ->setMethods(array(
173         // メソッドは配列として渡されます
174         array(
175             'name'       => 'setBar',
176             'parameters' => array(
177                 array('name' => 'bar'),
178             ),
179             'body'       => '$this->_bar = $bar;' . "\n" . 'return $this;',
180             'docblock'   => new Zend_CodeGenerator_Php_Docblock(array(
181                 'shortDescription' => 'barプロパティーを設定',
182                 'tags'             => array(
183                     new Zend_CodeGenerator_Php_Docblock_Tag_Param(array(
184                         'paramName' => 'bar',
185                         'datatype'  => 'string'
186                     )),
187                     new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
188                         'datatype'  => 'string',
189                     )),
190                 ),
191             )),
192         ),
193         // メソッドは具体的なインスタンスとして渡されます
194         new Zend_CodeGenerator_Php_Method(array(
195             'name' => 'getBar',
196             'body'       => 'return $this->_bar;',
197             'docblock'   => new Zend_CodeGenerator_Php_Docblock(array(
198                 'shortDescription' => 'barプロパティーを取得',
199                 'tags'             => array(
200                     new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
201                         'datatype'  => 'string|null',
202                     )),
203                 ),
204             )),
205         )),
206     ));
208 echo $foo->generate();
209 ]]></programlisting>
211         <para>
212             上記のコードは下記の出力になります。:
213         </para>
215         <programlisting language="php"><![CDATA[
217  * 生成されたクラスサンプル
219  * これはZend_CodeGeneratorで生成されたクラスです。
221  * @version $Rev:$
222  * @license New BSD
223  */
224 class Foo
227     protected $_bar = 'baz';
229     public $baz = 'bat';
231     const bat = 'foobarbazbat';
233     /**
234      * barプロパティーを設定
235      *
236      * @param string bar
237      * @return string
238      */
239     public function setBar($bar)
240     {
241         $this->_bar = $bar;
242         return $this;
243     }
245     /**
246      * barプロパティーを取得
247      *
248      * @return string|null
249      */
250     public function getBar()
251     {
252         return $this->_bar;
253     }
256 ]]></programlisting>
257     </example>
259     <example id="zend.codegenerator.examples.file">
260         <title>PHPファイルの生成</title>
262         <para>
263             <classname>Zend_CodeGenerator_Php_File</classname>は<acronym>PHP</acronym>ファイルのコンテンツ生成でも使えます。
264             あなたは、任意のコンテンツ本体だけでなくクラスを含めることができます。
265             クラスを付与するとき、具体的な<classname>Zend_CodeGenerator_Php_Class</classname>インスタンスか、
266             またはクラスを定めている配列を添付しなければなりません。
267         </para>
269         <para>
270             下記の例では、前述の例のクラス定義の1つにつき<varname>$foo</varname>を定義したと仮定します。
271         </para>
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クラスファイル',
278         'tags'             => array(
279             array(
280                 'name'        => 'license',
281                 'description' => 'New BSD',
282             ),
283         ),
284     )),
285     'body'     => 'define(\'APPLICATION_ENV\', \'testing\');',
287 ]]></programlisting>
289         <para>
290             <methodname>generate()</methodname>を呼び出すとコードを生成します。
291             しかし、ファイルに書き出しません。
292             コンテンツを捕まえて、自分自身で書き出す必要があります。
293             その例です。:
294         </para>
296         <programlisting language="php"><![CDATA[
297 $code = $file->generate();
298 file_put_contents('Foo.php', $code);
299 ]]></programlisting>
301         <para>
302             上記は下記のファイルを生成します:
303         </para>
305         <programlisting language="php"><![CDATA[
306 <?php
308  * Fooクラスファイル
310  * @license New BSD
311  */
314  * 生成されたクラスサンプル
316  * これはZend_CodeGeneratorで生成されたクラスです。
318  * @version $Rev:$
319  * @license New BSD
320  */
321 class Foo
324     protected $_bar = 'baz';
326     public $baz = 'bat';
328     const bat = 'foobarbazbat';
330     /**
331      * barプロパティーを設定
332      *
333      * @param string bar
334      * @return string
335      */
336     public function setBar($bar)
337     {
338         $this->_bar = $bar;
339         return $this;
340     }
342     /**
343      * barプロパティーを取得
344      *
345      * @return string|null
346      */
347     public function getBar()
348     {
349         return $this->_bar;
350     }
354 define('APPLICATION_ENV', 'testing');
355 ]]></programlisting>
356     </example>
358     <example id="zend.codegenerator.examples.reflection-file">
359         <title>reflection経由のPHPファイルのコード生成の種まき</title>
361         <para>
362             コード・ジェネレーターを使って、
363             既存の<acronym>PHP</acronym>ファイルに<acronym>PHP</acronym>コードを加えることができます。
364             そうするためには、まずそれにたいしてreflectionを実行する必要があります。
365             静的メソッド<methodname>fromReflectedFileName()</methodname>によりこれを実行できます。
366         </para>
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());
373 ]]></programlisting>
374     </example>
376     <example id="zend.codegenerator.examples.reflection-class">
377         <title>reflection経由のPHPクラス生成の種まき</title>
379         <para>
380             コード・ジェネレーターを使って、既存のPHPファイルにPHPコードを加えることができます。
381             そうするために、最初にクラスをジェネレーター・オブジェクトにマップするために、
382             静的メソッド<methodname>fromReflection()</methodname>を使ってください。
383             そこから追加のプロパティまたはメソッドを加えて、そしてクラスを再生成するでしょう。
384         </para>
386         <programlisting language="php"><![CDATA[
387 $generator = Zend_CodeGenerator_Php_Class::fromReflection(
388     new Zend_Reflection_Class($class)
390 $generator->setMethod(array(
391     'name'       => 'setBaz',
392     'parameters' => array(
393         array('name' => 'baz'),
394     ),
395     'body'       => '$this->_baz = $baz;' . "\n" . 'return $this;',
396     'docblock'   => new Zend_CodeGenerator_Php_Docblock(array(
397         'shortDescription' => 'bazプロパティーを設定',
398         'tags'             => array(
399             new Zend_CodeGenerator_Php_Docblock_Tag_Param(array(
400                 'paramName' => 'baz',
401                 'datatype'  => 'string'
402             )),
403             new Zend_CodeGenerator_Php_Docblock_Tag_Return(array(
404                 'datatype'  => 'string',
405             )),
406         ),
407     )),
409 $code = $generator->generate();
410 ]]></programlisting>
411     </example>
412 </sect1>