Zend_CodeGenerator-Reference.xml 19 KB

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