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 :</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 :
</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 :</para>
<programlisting language="php"><![CDATA[
<?php
class World
{
public function hello()
{
echo 'Hello world!';
}
public function mrMcFeeley()
{
echo 'Hellow Mr. McFeeley!';
}
}
]]></programlisting>
</sect2>
</sect1>
|