Zend_CodeGenerator-Introduction.xml 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15617 -->
  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. PHP en utilisant une interface orientée objet. Il peut générer ou mettre à jour du code. Il
  9. est aussi possible d'étendre ces classes afin de changer le langage de référence pour
  10. 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 <code>generate()</code>.
  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 "World.php" que nous avons alors inclus. Nous pourrions dès lors agir
  69. 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>