File: Zend_CodeGenerator-Introduction.xml

package info (click to toggle)
zendframework 1.12.9%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 133,584 kB
  • sloc: xml: 1,311,829; php: 570,173; sh: 170; makefile: 125; sql: 121
file content (129 lines) | stat: -rw-r--r-- 3,774 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<?xml version="1.0" encoding="UTF-8"?>
<!-- EN-Revision: 24249 -->
<!-- Reviewed: no -->
<sect1 id="zend.codegenerator.introduction">
    <title>Introduction</title>

    <para>
        <classname>Zend_CodeGenerator</classname> est un outils permettant de générer du code
        <acronym>PHP</acronym> en utilisant une interface orientée objet. Il peut générer ou
        mettre à jour du code. Il est aussi possible d'étendre ces classes afin de changer le
        langage de référence pour générer du Javascript, des hôtes virtuels Apache ..., par exemple.
    </para>

    <sect2 id="zend.codegenerator.introduction.theory">
        <title>Théorie</title>

        <para>
            Dans la plupart des cas, vous créerez une instance du générateur de code, et vous
            le configurez. Pour afficher le code généré, un simple echo suffira, ou l'appel à sa
            méthode <methodname>generate()</methodname>.
        </para>

        <programlisting language="php"><![CDATA[
// Passage de configuration au constructor:
$file = new Zend_CodeGenerator_Php_File(array(
    'classes' => array(
        new Zend_CodeGenerator_Php_Class(array(
            'name'    => 'World',
            'methods' => array(
                new Zend_CodeGenerator_Php_Method(array(
                    'name' => 'hello',
                    'body' => 'echo \'Hello world!\';',
                )),
            ),
        )),
    )
));

// Configuration après instanciation
$method = new Zend_CodeGenerator_Php_Method();
$method->setName('hello')
       ->setBody('echo \'Hello world!\';');

$class = new Zend_CodeGenerator_Php_Class();
$class->setName('World')
      ->setMethod($method);

$file = new Zend_CodeGenerator_Php_File();
$file->setClass($class);

// Rendu du fichier généré:
echo $file;

// 2criture du fichier généré:
file_put_contents('World.php', $file->generate());
]]></programlisting>

        <para>Les 2 exemples ci-dessus vont rendre le même résultat&#160;:</para>

        <programlisting language="php"><![CDATA[
<?php

class World
{

    public function hello()
    {
        echo 'Hello world!';
    }

}
]]></programlisting>

        <para>
            Il est aussi possible de mettre à jour un code existant, par exemple, ajouter une
            méthode à une classe. Dans ce cas, vous devez inspecter le code existant en utilisant la
            réflexion, puis ajouter une nouvelle méthode. <classname>Zend_CodeGenerator</classname>
            rend ceci très simple en utilisant <link
            linkend="zend.reflection">Zend_Reflection</link>.
        </para>

        <para>
            Par exemple, imaginons que nous avons sauvegardé le code de l'exemple ci-dessus
            dans un fichier "<filename>World.php</filename>" que nous avons alors inclus.
            Nous pourrions dès lors agir comme suit&#160;:
        </para>

        <programlisting language="php"><![CDATA[
$class = Zend_CodeGenerator_Php_Class::fromReflection(
    new Zend_Reflection_Class('World')
);

$method = new Zend_CodeGenerator_Php_Method();
$method->setName('mrMcFeeley')
       ->setBody('echo \'Hello, Mr. McFeeley!\';');
$class->setMethod($method);

$file = new Zend_CodeGenerator_Php_File();
$file->setClass($class);

// Rendu du code généré
echo $file;

// Ou encore sauvegarde par dessus l'ancien fichier
file_put_contents('World.php', $file->generate());
]]></programlisting>

        <para>La nouvelle classe ressemblera à ça&#160;:</para>

        <programlisting language="php"><![CDATA[
<?php

class World
{

    public function hello()
    {
        echo 'Hello world!';
    }

    public function mrMcFeeley()
    {
        echo 'Hellow Mr. McFeeley!';
    }

}
]]></programlisting>
    </sect2>
</sect1>