Zend_CodeGenerator-Introduction.xml 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.codegenerator.introduction">
  5. <title>Introduction</title>
  6. <para>
  7. <classname>Zend_CodeGenerator</classname> est un outils permettant de générer du code
  8. <acronym>PHP</acronym> en utilisant une interface orientée objet. Il peut générer ou
  9. mettre à jour du code. Il est aussi possible d'étendre ces classes afin de changer le
  10. langage de référence pour générer du Javascript, des hôtes virtuels Apache ..., par exemple.
  11. </para>
  12. <sect2 id="zend.codegenerator.introduction.theory">
  13. <title>Théorie</title>
  14. <para>
  15. Dans la plupart des cas, vous créerez une instance du générateur de code, et vous
  16. le configurez. Pour afficher le code généré, un simple echo suffira, ou l'appel à sa
  17. méthode <methodname>generate()</methodname>.
  18. </para>
  19. <programlisting language="php"><![CDATA[
  20. // Passage de configuration au constructor:
  21. $file = new Zend_CodeGenerator_Php_File(array(
  22. 'classes' => array(
  23. new Zend_CodeGenerator_Php_Class(array(
  24. 'name' => 'World',
  25. 'methods' => array(
  26. new Zend_CodeGenerator_Php_Method(array(
  27. 'name' => 'hello',
  28. 'body' => 'echo \'Hello world!\';',
  29. )),
  30. ),
  31. )),
  32. )
  33. ));
  34. // Configuration après instanciation
  35. $method = new Zend_CodeGenerator_Php_Method();
  36. $method->setName('hello')
  37. ->setBody('echo \'Hello world!\';');
  38. $class = new Zend_CodeGenerator_Php_Class();
  39. $class->setName('World')
  40. ->setMethod($method);
  41. $file = new Zend_CodeGenerator_Php_File();
  42. $file->setClass($class);
  43. // Rendu du fichier généré:
  44. echo $file;
  45. // 2criture du fichier généré:
  46. file_put_contents('World.php', $file->generate());
  47. ]]></programlisting>
  48. <para>Les 2 exemples ci-dessus vont rendre le même résultat&#160;:</para>
  49. <programlisting language="php"><![CDATA[
  50. <?php
  51. class World
  52. {
  53. public function hello()
  54. {
  55. echo 'Hello world!';
  56. }
  57. }
  58. ]]></programlisting>
  59. <para>
  60. Il est aussi possible de mettre à jour un code existant, par exemple, ajouter une
  61. méthode à une classe. Dans ce cas, vous devez inspecter le code existant en utilisant la
  62. réflexion, puis ajouter une nouvelle méthode. <classname>Zend_CodeGenerator</classname>
  63. rend ceci très simple en utilisant <link
  64. linkend="zend.reflection">Zend_Reflection</link>.
  65. </para>
  66. <para>
  67. Par exemple, imaginons que nous avons sauvegardé le code de l'exemple ci-dessus
  68. dans un fichier "<filename>World.php</filename>" que nous avons alors inclus.
  69. Nous pourrions dès lors agir comme suit&#160;:
  70. </para>
  71. <programlisting language="php"><![CDATA[
  72. $class = Zend_CodeGenerator_Php_Class::fromReflection(
  73. new Zend_Reflection_Class('World')
  74. );
  75. $method = new Zend_CodeGenerator_Php_Method();
  76. $method->setName('mrMcFeeley')
  77. ->setBody('echo \'Hello, Mr. McFeeley!\';');
  78. $class->setMethod($method);
  79. $file = new Zend_CodeGenerator_Php_File();
  80. $file->setClass($class);
  81. // Rendu du code généré
  82. echo $file;
  83. // Ou encore sauvegarde par dessus l'ancien fichier
  84. file_put_contents('World.php', $file->generate());
  85. ]]></programlisting>
  86. <para>La nouvelle classe ressemblera à ça&#160;:</para>
  87. <programlisting language="php"><![CDATA[
  88. <?php
  89. class World
  90. {
  91. public function hello()
  92. {
  93. echo 'Hello world!';
  94. }
  95. public function mrMcFeeley()
  96. {
  97. echo 'Hellow Mr. McFeeley!';
  98. }
  99. }
  100. ]]></programlisting>
  101. </sect2>
  102. </sect1>