Zend_CodeGenerator-Reference.xml 20 KB

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