Zend_CodeGenerator-Reference.xml 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 15617 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.codegenerator.reference">
  5. <title>Zend_CodeGenerator Réference</title>
  6. <sect2 id="zend.codegenerator.reference.abstracts">
  7. <title>Classes abstraites et interfaces</title>
  8. <sect3 id="zend.codegenerator.reference.abstracts.abstract">
  9. <title>Zend_CodeGenerator_Abstract</title>
  10. <para>
  11. La classe de base de CodeGenerator dont toutes les classes héritent. Elle
  12. propose l'API suivante&#160;:
  13. </para>
  14. <programlisting language="php"><![CDATA[
  15. abstract class Zend_CodeGenerator_Abstract
  16. {
  17. final public function __construct(Array $options = array())
  18. public function setOptions(Array $options)
  19. public function setSourceContent($sourceContent)
  20. public function getSourceContent()
  21. protected function _init()
  22. protected function _prepare()
  23. abstract public function generate();
  24. final public function __toString()
  25. }
  26. ]]></programlisting>
  27. <para>
  28. Le constructeur appelle <code>_init()</code> (restée vide, à écrire dans les
  29. classes concrètes), puis passe le paramètre <code>$options</code> à
  30. <code>setOptions()</code>, et enfin appelle <code>_prepare()</code> (encore une
  31. fois, vide, à écrire dans les classes concrètes).
  32. </para>
  33. <para>
  34. Comme partout dans Zend Framework, <code>setOptions()</code> compare les
  35. clés du tableau passé comme paramètre à des setters de la classe, et passe donc la
  36. valeur à la bonne méthode si trouvée.
  37. </para>
  38. <para>
  39. <code>__toString()</code> est marquée final, et proxie vers
  40. <code>generate()</code>.
  41. </para>
  42. <para>
  43. <code>setSourceContent()</code> et <code>getSourceContent()</code> permettent
  44. soit de définir le contenu par défaut soit de remplacer ce contenu par la tâche de
  45. génération.
  46. </para>
  47. </sect3>
  48. <sect3 id="zend.codegenerator.reference.abstracts.php-abstract">
  49. <title>Zend_CodeGenerator_Php_Abstract</title>
  50. <para>
  51. <classname>Zend_CodeGenerator_Php_Abstract</classname> étend
  52. <classname>Zend_CodeGenerator_Abstract</classname> et ajoute des méthodes permettant
  53. de savoir si le contenu a changé et aussi le nombre d'indentation à utiliser avant
  54. chaque ligne de code à générer. L'API est la suivante:
  55. </para>
  56. <programlisting language="php"><![CDATA[
  57. abstract class Zend_CodeGenerator_Php_Abstract
  58. extends Zend_CodeGenerator_Abstract
  59. {
  60. public function setSourceDirty($isSourceDirty = true)
  61. public function isSourceDirty()
  62. public function setIndentation($indentation)
  63. public function getIndentation()
  64. }
  65. ]]></programlisting>
  66. </sect3>
  67. <sect3 id="zend.codegenerator.reference.abstracts.php-member-abstract">
  68. <title>Zend_CodeGenerator_Php_Member_Abstract</title>
  69. <para>
  70. <classname>Zend_CodeGenerator_Php_Member_Abstract</classname> est une classe
  71. de base pour générer des propriétés ou des méthodes de classe, et propose des
  72. accesseurs et des mutateurs pour créer la visibilité, l'abstraction, la staticité ou
  73. la finalité. L'API est la suivante&#160;:
  74. </para>
  75. <programlisting language="php"><![CDATA[
  76. abstract class Zend_CodeGenerator_Php_Member_Abstract
  77. extends Zend_CodeGenerator_Php_Abstract
  78. {
  79. public function setAbstract($isAbstract)
  80. public function isAbstract()
  81. public function setStatic($isStatic)
  82. public function isStatic()
  83. public function setVisibility($visibility)
  84. public function getVisibility()
  85. public function setName($name)
  86. public function getName()
  87. }
  88. ]]></programlisting>
  89. </sect3>
  90. </sect2>
  91. <sect2 id="zend.codegenerator.reference.concrete">
  92. <title>Classes CodeGenerator concrêtes</title>
  93. <sect3 id="zend.codegenerator.reference.concrete.php-body">
  94. <title>Zend_CodeGenerator_Php_Body</title>
  95. <para>
  96. <classname>Zend_CodeGenerator_Php_Body</classname> est utilisée pour générer
  97. du code PHP procédural à inclure dans un fichier. Vous passez donc simplement du
  98. contenu à cet objet, qui vous le ressortira une fois son <code>generate()</code>
  99. appelé.
  100. </para>
  101. <para>L'API de cette classe est comme suit:</para>
  102. <programlisting language="php"><![CDATA[
  103. class Zend_CodeGenerator_Php_Body extends Zend_CodeGenerator_Php_Abstract
  104. {
  105. public function setContent($content)
  106. public function getContent()
  107. public function generate()
  108. }
  109. ]]></programlisting>
  110. </sect3>
  111. <sect3 id="zend.codegenerator.reference.concrete.php-class">
  112. <title>Zend_CodeGenerator_Php_Class</title>
  113. <para>
  114. <classname>Zend_CodeGenerator_Php_Class</classname> est utilisée pour générer
  115. du code de classes PHP. Les fonctions de bases génèrent la classe elle-même, ainsi
  116. que ses commentaires PHPDoc. Vous pouvez bien sûr spécifier la classe comme
  117. abstraite, finale, ou encore lui rajouter des constantes/attributs/méthodes sous
  118. forme d'autres objets décrits eux aussi dans ce chapitre.
  119. </para>
  120. <para>Voici l'API&#160;:</para>
  121. <programlisting language="php"><![CDATA[
  122. class Zend_CodeGenerator_Php_Class extends Zend_CodeGenerator_Php_Abstract
  123. {
  124. public static function fromReflection(
  125. Zend_Reflection_Class $reflectionClass
  126. )
  127. public function setDocblock(Zend_CodeGenerator_Php_Docblock $docblock)
  128. public function getDocblock()
  129. public function setName($name)
  130. public function getName()
  131. public function setAbstract($isAbstract)
  132. public function isAbstract()
  133. public function setExtendedClass($extendedClass)
  134. public function getExtendedClass()
  135. public function setImplementedInterfaces(Array $implementedInterfaces)
  136. public function getImplementedInterfaces()
  137. public function setProperties(Array $properties)
  138. public function setProperty($property)
  139. public function getProperties()
  140. public function getProperty($propertyName)
  141. public function setMethods(Array $methods)
  142. public function setMethod($method)
  143. public function getMethods()
  144. public function getMethod($methodName)
  145. public function hasMethod($methodName)
  146. public function isSourceDirty()
  147. public function generate()
  148. }
  149. ]]></programlisting>
  150. <para>
  151. La méthode <code>setProperty()</code> accepte soit un tableau qui peut être
  152. utilisé pour générer une instance de
  153. <classname>Zend_CodeGenerator_Php_Property</classname>, soit directement une
  154. instance de <classname>Zend_CodeGenerator_Php_Property</classname>.
  155. <code>setMethod()</code> se manipule de la même manière, et utilise une instance de
  156. <classname>Zend_CodeGenerator_Php_Method</classname>.
  157. </para>
  158. <para>
  159. A noter que <code>setDocBlock()</code> attend une instance de
  160. <classname>Zend_CodeGenerator_Php_DocBlock</classname>.
  161. </para>
  162. </sect3>
  163. <sect3 id="zend.codegenerator.reference.concrete.php-docblock">
  164. <title>Zend_CodeGenerator_Php_Docblock</title>
  165. <para>
  166. <classname>Zend_CodeGenerator_Php_Docblock</classname> est utilisée pour
  167. générer du code PHPDoc arbitraire, y compris les commentaires de description longs
  168. ou courts.
  169. </para>
  170. <para>
  171. Les tags annotation doivent être spécifiés via <code>setTag()</code> ou
  172. <code>setTags()</code> qui prennent en paramètre un objet
  173. <classname>Zend_CodeGenerator_Php_Docblock_Tag</classname> ou un tableau qui
  174. permettra sa construction.
  175. </para>
  176. <para>Voici l'API:</para>
  177. <programlisting language="php"><![CDATA[
  178. class Zend_CodeGenerator_Php_Docblock extends Zend_CodeGenerator_Php_Abstract
  179. {
  180. public static function fromReflection(
  181. Zend_Reflection_Docblock $reflectionDocblock
  182. )
  183. public function setShortDescription($shortDescription)
  184. public function getShortDescription()
  185. public function setLongDescription($longDescription)
  186. public function getLongDescription()
  187. public function setTags(Array $tags)
  188. public function setTag($tag)
  189. public function getTags()
  190. public function generate()
  191. }
  192. ]]></programlisting>
  193. </sect3>
  194. <sect3 id="zend.codegenerator.reference.concrete.php-docblock-tag">
  195. <title>Zend_CodeGenerator_Php_Docblock_Tag</title>
  196. <para>
  197. <classname>Zend_CodeGenerator_Php_Docblock_Tag</classname> est utilisée pour
  198. créer des tags d'annotation PHPdoc. Les tags doivent posséder un nom (la partie qui
  199. suit immédiatement le '@') et une description (ce qui suit le tag).
  200. </para>
  201. <para>Voici l'API&#160;:</para>
  202. <programlisting language="php"><![CDATA[
  203. class Zend_CodeGenerator_Php_Docblock_Tag
  204. extends Zend_CodeGenerator_Php_Abstract
  205. {
  206. public static function fromReflection(
  207. Zend_Reflection_Docblock_Tag $reflectionTag
  208. )
  209. public function setName($name)
  210. public function getName()
  211. public function setDescription($description)
  212. public function getDescription()
  213. public function generate()
  214. }
  215. ]]></programlisting>
  216. </sect3>
  217. <sect3 id="zend.codegenerator.reference.concrete.php-docblock-tag-param">
  218. <title>Zend_CodeGenerator_Php_DocBlock_Tag_Param</title>
  219. <para>
  220. <classname>Zend_CodeGenerator_Php_DocBlock_Tag_Param</classname> est une
  221. version spéciale de <classname>Zend_CodeGenerator_Php_DocBlock_Tag</classname>, et
  222. permet de représenter un paramètre d'une méthode. Le nom du tag est donc connu, mais
  223. des informations additionnelles sont requises&#160;: le nom du paramètre et le type
  224. de données qu'il représente.
  225. </para>
  226. <para>L'API de cette classe est la suivante&#160;:</para>
  227. <programlisting language="php"><![CDATA[
  228. class Zend_CodeGenerator_Php_Docblock_Tag_Param
  229. extends Zend_CodeGenerator_Php_Docblock_Tag
  230. {
  231. public static function fromReflection(
  232. Zend_Reflection_Docblock_Tag $reflectionTagParam
  233. )
  234. public function setDatatype($datatype)
  235. public function getDatatype()
  236. public function setParamName($paramName)
  237. public function getParamName()
  238. public function generate()
  239. }
  240. ]]></programlisting>
  241. </sect3>
  242. <sect3 id="zend.codegenerator.reference.concrete.php-docblock-tag-return">
  243. <title>Zend_CodeGenerator_Php_DocBlock_Tag_Return</title>
  244. <para>
  245. <classname>Zend_CodeGenerator_Php_Docblock_Tab_Return</classname> est une
  246. variante qui permet de modéliser la valeur de retour d'une méthode. Dans ce cas, le
  247. nom du tag est connu ('return') mais pas le type de retour.
  248. </para>
  249. <para>Voici l'API&#160;:</para>
  250. <programlisting language="php"><![CDATA[
  251. class Zend_CodeGenerator_Php_Docblock_Tag_Param
  252. extends Zend_CodeGenerator_Php_Docblock_Tag
  253. {
  254. public static function fromReflection(
  255. Zend_Reflection_Docblock_Tag $reflectionTagReturn
  256. )
  257. public function setDatatype($datatype)
  258. public function getDatatype()
  259. public function generate()
  260. }
  261. ]]></programlisting>
  262. </sect3>
  263. <sect3 id="zend.codegenerator.reference.concrete.php-file">
  264. <title>Zend_CodeGenerator_Php_File</title>
  265. <para>
  266. <classname>Zend_CodeGenerator_Php_File</classname> est utilisée pour générer
  267. le contenu complet d'un fichier PHP. Le fichier peut contenir des classes, du code
  268. PHP ou encore des commentaires PHPDoc.
  269. </para>
  270. <para>
  271. Pour ajouter des classes, vous devrez soit passer un tableau d'informations à
  272. passer au constructeur de <classname>Zend_CodeGenerator_Php_Class</classname>, soit
  273. un objet de cette dernière classe directement. Idem concernant les commentaires
  274. PHPDoc et la classe <classname>Zend_CodeGenerator_Php_Docblock</classname>
  275. </para>
  276. <para>Voici l'API de la classe&#160;:</para>
  277. <programlisting language="php"><![CDATA[
  278. class Zend_CodeGenerator_Php_File extends Zend_CodeGenerator_Php_Abstract
  279. {
  280. public static function fromReflectedFilePath(
  281. $filePath,
  282. $usePreviousCodeGeneratorIfItExists = true,
  283. $includeIfNotAlreadyIncluded = true)
  284. public static function fromReflection(Zend_Reflection_File $reflectionFile)
  285. public function setDocblock(Zend_CodeGenerator_Php_Docblock $docblock)
  286. public function getDocblock()
  287. public function setRequiredFiles($requiredFiles)
  288. public function getRequiredFiles()
  289. public function setClasses(Array $classes)
  290. public function getClass($name = null)
  291. public function setClass($class)
  292. public function setFilename($filename)
  293. public function getFilename()
  294. public function getClasses()
  295. public function setBody($body)
  296. public function getBody()
  297. public function isSourceDirty()
  298. public function generate()
  299. }
  300. ]]></programlisting>
  301. </sect3>
  302. <sect3 id="zend.codegenerator.reference.concrete.php-member-container">
  303. <title>Zend_CodeGenerator_Php_Member_Container</title>
  304. <para>
  305. <classname>Zend_CodeGenerator_Php_Member_Container</classname> est utilisée en
  306. interne par <classname>Zend_CodeGenerator_Php_Class</classname> pour garder une
  307. trace des attributs et des méthodes de classe. Ceux-ci sont indéxés par nom.
  308. </para>
  309. <para>Voici l'API de cette classe&#160;:</para>
  310. <programlisting language="php"><![CDATA[
  311. class Zend_CodeGenerator_Php_Member_Container extends ArrayObject
  312. {
  313. public function __construct($type = self::TYPE_PROPERTY)
  314. }
  315. ]]></programlisting>
  316. </sect3>
  317. <sect3 id="zend.codegenerator.reference.concrete.php-method">
  318. <title>Zend_CodeGenerator_Php_Method</title>
  319. <para>
  320. <classname>Zend_CodeGenerator_Php_Method</classname> est utilisée pour décrire
  321. une méthode d'une classe, et va générer son code, et ses éventuels commentaires
  322. PHPDoc. La visibilité et le statut (abstraite, finale, statique) peuvent être
  323. spécifiées par la classe parente
  324. <classname>Zend_CodeGenerator_Php_Member_Abstract</classname>. Enfin, il est aussi
  325. possible de spécifier les paramètres de la méthodes, et sa valeur de retour.
  326. </para>
  327. <para>
  328. Les paramètres peuvent être indiqués via <code>setParameter()</code> ou
  329. <code>setParameters()</code> qui acceptent soit des tableaux décrivant les
  330. paramètres à passer au constructeur
  331. de<classname>Zend_CodeGenerator_Php_Parameter</classname>, soit des objets de cette
  332. dernière classe.
  333. </para>
  334. <para>L'API de cette classe est la suivante&#160;:</para>
  335. <programlisting language="php"><![CDATA[
  336. class Zend_CodeGenerator_Php_Method
  337. extends Zend_CodeGenerator_Php_Member_Abstract
  338. {
  339. public static function fromReflection(
  340. Zend_Reflection_Method $reflectionMethod
  341. )
  342. public function setDocblock(Zend_CodeGenerator_Php_Docblock $docblock)
  343. public function getDocblock()
  344. public function setFinal($isFinal)
  345. public function setParameters(Array $parameters)
  346. public function setParameter($parameter)
  347. public function getParameters()
  348. public function setBody($body)
  349. public function getBody()
  350. public function generate()
  351. }
  352. ]]></programlisting>
  353. </sect3>
  354. <sect3 id="zend.codegenerator.reference.concrete.php-parameter">
  355. <title>Zend_CodeGenerator_Php_Parameter</title>
  356. <para>
  357. <classname>Zend_CodeGenerator_Php_Parameter</classname> est utilisée pour
  358. décrire un paramètre de méthode. Chacun doit avoir une position (sinon l'ordre de
  359. leur enregistrement sera utilisé par défaut), une valeur par défaut, un type et
  360. enfin un nom.
  361. </para>
  362. <para>Voici l'API&#160;:</para>
  363. <programlisting language="php"><![CDATA[
  364. class Zend_CodeGenerator_Php_Parameter extends Zend_CodeGenerator_Php_Abstract
  365. {
  366. public static function fromReflection(
  367. Zend_Reflection_Parameter $reflectionParameter
  368. )
  369. public function setType($type)
  370. public function getType()
  371. public function setName($name)
  372. public function getName()
  373. public function setDefaultValue($defaultValue)
  374. public function getDefaultValue()
  375. public function setPosition($position)
  376. public function getPosition()
  377. public function generate()
  378. }
  379. ]]></programlisting>
  380. </sect3>
  381. <sect3 id="zend.codegenerator.reference.concrete.php-property">
  382. <title>Zend_CodeGenerator_Php_Property</title>
  383. <para>
  384. <classname>Zend_CodeGenerator_Php_Property</classname> est utilisée pour
  385. décrire une propriété PHP, nous entendons par là une variable ou une constante PHP.
  386. Une valeur par défaut peut alors être spécifiée. La visibilité de la propriété peut
  387. être définie par la classe parente,
  388. <classname>Zend_CodeGenerator_Php_Member_Abstract</classname>.
  389. </para>
  390. <para>Voici l'API&#160;:</para>
  391. <programlisting language="php"><![CDATA[
  392. class Zend_CodeGenerator_Php_Property
  393. extends Zend_CodeGenerator_Php_Member_Abstract
  394. {
  395. public static function fromReflection(
  396. Zend_Reflection_Property $reflectionProperty
  397. )
  398. public function setConst($const)
  399. public function isConst()
  400. public function setDefaultValue($defaultValue)
  401. public function getDefaultValue()
  402. public function generate()
  403. }
  404. ]]></programlisting>
  405. </sect3>
  406. </sect2>
  407. </sect1>