Zend_CodeGenerator-Reference.xml 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.codegenerator.reference">
  5. <title>Referencias de Zend_CodeGenerator</title>
  6. <sect2 id="zend.codegenerator.reference.abstracts">
  7. <title>Clases Abstractas e Interfaces</title>
  8. <sect3 id="zend.codegenerator.reference.abstracts.abstract">
  9. <title>Zend_CodeGenerator_Abstract</title>
  10. <para>
  11. La clase base desde la cual heredan todos las clases
  12. CodeGenerator proporciona la
  13. funcionalidad mínima necesaria. Su
  14. <acronym>API</acronym>
  15. es la siguiente:
  16. </para>
  17. <programlisting language="php"><![CDATA[
  18. abstract class Zend_CodeGenerator_Abstract
  19. {
  20. final public function __construct(Array $options = array())
  21. public function setOptions(Array $options)
  22. public function setSourceContent($sourceContent)
  23. public function getSourceContent()
  24. protected function _init()
  25. protected function _prepare()
  26. abstract public function generate();
  27. final public function __toString()
  28. }
  29. ]]></programlisting>
  30. <para>
  31. El constructor primero llama a
  32. <methodname>_init()</methodname>
  33. (que se deja vacía para
  34. implementar extenciones a clases concretas), se pasa entonces
  35. el
  36. parámetro
  37. <varname>$options</varname>
  38. a
  39. <methodname>setOptions()</methodname>
  40. , y finalmente se llama
  41. a
  42. <methodname>_prepare()</methodname>
  43. (nuevamente, a ser
  44. implementada por extensión de una clase)
  45. </para>
  46. <para>
  47. Al igual que la mayoría de las clases en Zend Framework,
  48. <methodname>setOptions()</methodname>
  49. compara una opción
  50. clave con setters existentes en la clase, y pasa el valor de ese
  51. método si lo encuentra.
  52. </para>
  53. <para>
  54. <methodname>__toString()</methodname>
  55. es marcado como final, y
  56. proxies a
  57. <methodname>generate()</methodname>
  58. .
  59. </para>
  60. <para>
  61. <methodname>setSourceContent()</methodname>
  62. y
  63. <methodname>getSourceContent()</methodname>
  64. están destinados
  65. ya sea para fijar el valor por defecto del contenido para el
  66. código a
  67. ser generado, o para sustituir dicho contenido una vez
  68. que se completen todas las
  69. tareas de generación.
  70. </para>
  71. </sect3>
  72. <sect3 id="zend.codegenerator.reference.abstracts.php-abstract">
  73. <title>Zend_CodeGenerator_Php_Abstract</title>
  74. <para>
  75. <classname>Zend_CodeGenerator_Php_Abstract</classname>
  76. extiende
  77. <classname>Zend_CodeGenerator_Abstract</classname>
  78. , y añade
  79. algunas propiedades para localizar su contenido si es que ha
  80. cambiado, así
  81. como el nivel de identación que debe aparecer
  82. antes del contenido generado. Su
  83. <acronym>API</acronym>
  84. es la
  85. siguiente:
  86. </para>
  87. <programlisting language="php"><![CDATA[
  88. abstract class Zend_CodeGenerator_Php_Abstract
  89. extends Zend_CodeGenerator_Abstract
  90. {
  91. public function setSourceDirty($isSourceDirty = true)
  92. public function isSourceDirty()
  93. public function setIndentation($indentation)
  94. public function getIndentation()
  95. }
  96. ]]></programlisting>
  97. </sect3>
  98. <sect3 id="zend.codegenerator.reference.abstracts.php-member-abstract">
  99. <title>Zend_CodeGenerator_Php_Member_Abstract</title>
  100. <para>
  101. <classname>Zend_CodeGenerator_Php_Member_Abstract</classname>
  102. es
  103. una clase base para generar los miembros de clase -- propiedades
  104. y métodos -- y
  105. brinda accesos y mutadores para establecer
  106. visibilidad; ya sea el miembro abstracto o
  107. no, estático o
  108. definitivo; y el nombre del miembro. Su
  109. <acronym>API</acronym>
  110. es la siguiente:
  111. </para>
  112. <programlisting language="php"><![CDATA[
  113. abstract class Zend_CodeGenerator_Php_Member_Abstract
  114. extends Zend_CodeGenerator_Php_Abstract
  115. {
  116. public function setAbstract($isAbstract)
  117. public function isAbstract()
  118. public function setStatic($isStatic)
  119. public function isStatic()
  120. public function setVisibility($visibility)
  121. public function getVisibility()
  122. public function setName($name)
  123. public function getName()
  124. }
  125. ]]></programlisting>
  126. </sect3>
  127. </sect2>
  128. <sect2 id="zend.codegenerator.reference.concrete">
  129. <title>Clases Concretas de CodeGenerator</title>
  130. <sect3 id="zend.codegenerator.reference.concrete.php-body">
  131. <title>Zend_CodeGenerator_Php_Body</title>
  132. <para>
  133. <classname>Zend_CodeGenerator_Php_Body</classname>
  134. se destina
  135. para generar código procedural arbitrario para incluir dentro de
  136. un
  137. archivo. Como tal, usted simplemente establece contenidos
  138. para el objeto, y éste
  139. devolverá el contenido cuando usted
  140. invoque a
  141. <methodname>generate()</methodname>
  142. .
  143. </para>
  144. <para>
  145. La
  146. <acronym>API</acronym>
  147. de la clase es la siguiente:
  148. </para>
  149. <programlisting language="php"><![CDATA[
  150. class Zend_CodeGenerator_Php_Body extends Zend_CodeGenerator_Php_Abstract
  151. {
  152. public function setContent($content)
  153. public function getContent()
  154. public function generate()
  155. }
  156. ]]></programlisting>
  157. </sect3>
  158. <sect3 id="zend.codegenerator.reference.concrete.php-class">
  159. <title>Zend_CodeGenerator_Php_Class</title>
  160. <para>
  161. <classname>Zend_CodeGenerator_Php_Class</classname>
  162. Está
  163. destinado a generar clases
  164. <acronym>PHP</acronym>
  165. . La
  166. funcionalidad básica sólo genera la clase
  167. <acronym>PHP</acronym>
  168. en si misma, así como opcionalmente el
  169. <acronym>PHP</acronym>
  170. DocBlock. Las clases pueden implementarse o heredarse de otras
  171. clases, y pueden ser
  172. marcadas como abstractas. Utilizando otras
  173. clases generadoras de código, también
  174. puede agregar constantes
  175. de clase, propiedades y métodos.
  176. </para>
  177. <para>
  178. La
  179. <acronym>API</acronym>
  180. de la clase es la siguiente:
  181. </para>
  182. <programlisting language="php"><![CDATA[
  183. class Zend_CodeGenerator_Php_Class extends Zend_CodeGenerator_Php_Abstract
  184. {
  185. public static function fromReflection(
  186. Zend_Reflection_Class $reflectionClass
  187. )
  188. public function setDocblock(Zend_CodeGenerator_Php_Docblock $docblock)
  189. public function getDocblock()
  190. public function setName($name)
  191. public function getName()
  192. public function setAbstract($isAbstract)
  193. public function isAbstract()
  194. public function setExtendedClass($extendedClass)
  195. public function getExtendedClass()
  196. public function setImplementedInterfaces(Array $implementedInterfaces)
  197. public function getImplementedInterfaces()
  198. public function setProperties(Array $properties)
  199. public function setProperty($property)
  200. public function getProperties()
  201. public function getProperty($propertyName)
  202. public function setMethods(Array $methods)
  203. public function setMethod($method)
  204. public function getMethods()
  205. public function getMethod($methodName)
  206. public function hasMethod($methodName)
  207. public function isSourceDirty()
  208. public function generate()
  209. }
  210. ]]></programlisting>
  211. <para>
  212. El método
  213. <methodname>setProperty()</methodname>
  214. acepta un
  215. array de información que puede ser utilizada para generar una
  216. instancia
  217. <classname>Zend_CodeGenerator_Php_Property</classname>
  218. -- o simplemente una instancia de
  219. <classname>Zend_CodeGenerator_Php_Property</classname>
  220. .
  221. Análogamente,
  222. <methodname>setMethod()</methodname>
  223. acepta o un
  224. array de información para generar una instancia de
  225. <classname>Zend_CodeGenerator_Php_Method</classname>
  226. o una
  227. instancia concreta de esa clase.
  228. </para>
  229. <para>
  230. Se debe observar que
  231. <methodname>setDocBlock()</methodname>
  232. espera una instancia de
  233. <classname>Zend_CodeGenerator_Php_DocBlock</classname>
  234. .
  235. </para>
  236. </sect3>
  237. <sect3 id="zend.codegenerator.reference.concrete.php-docblock">
  238. <title>Zend_CodeGenerator_Php_Docblock</title>
  239. <para>
  240. <classname>Zend_CodeGenerator_Php_Docblock</classname>
  241. puede ser
  242. utilizada para generar
  243. <acronym>PHP</acronym>
  244. docblocks
  245. arbitrarios, incluidas todas las características estándar de
  246. docblock:
  247. descripciones cortas y largas y además los tags de
  248. anotaciones.
  249. </para>
  250. <para>
  251. Los tags de anotación pueden establecerse utilizando los
  252. métodos
  253. <methodname>setTag()</methodname>
  254. y
  255. <methodname>setTags()</methodname>
  256. ; cada una de estas toman
  257. o un array describiendo el tag que puede ser pasado al
  258. constructor
  259. <classname>Zend_CodeGenerator_Php_Docblock_Tag</classname>
  260. ,
  261. o una instancia de esa clase.
  262. </para>
  263. <para>
  264. La
  265. <acronym>API</acronym>
  266. de la clase es la siguiente:
  267. </para>
  268. <programlisting language="php"><![CDATA[
  269. class Zend_CodeGenerator_Php_Docblock extends Zend_CodeGenerator_Php_Abstract
  270. {
  271. public static function fromReflection(
  272. Zend_Reflection_Docblock $reflectionDocblock
  273. )
  274. public function setShortDescription($shortDescription)
  275. public function getShortDescription()
  276. public function setLongDescription($longDescription)
  277. public function getLongDescription()
  278. public function setTags(Array $tags)
  279. public function setTag($tag)
  280. public function getTags()
  281. public function generate()
  282. }
  283. ]]></programlisting>
  284. </sect3>
  285. <sect3 id="zend.codegenerator.reference.concrete.php-docblock-tag">
  286. <title>Zend_CodeGenerator_Php_Docblock_Tag</title>
  287. <para>
  288. <classname>Zend_CodeGenerator_Php_Docblock_Tag</classname>
  289. está
  290. destinado a crear tags de anotaciones arbitrarias para su
  291. inclusión en
  292. <acronym>PHP</acronym>
  293. docblocks. Se espera que los
  294. tags (etiquetas) contengan un nombre (la porción que
  295. sigue
  296. inmediatamente después del símbolo '@') y una descripción (todo
  297. lo que sigue
  298. después del nombre del tag).
  299. </para>
  300. <para>
  301. La
  302. <acronym>API</acronym>
  303. de la clase es la siguiente:
  304. </para>
  305. <programlisting language="php"><![CDATA[
  306. class Zend_CodeGenerator_Php_Docblock_Tag
  307. extends Zend_CodeGenerator_Php_Abstract
  308. {
  309. public static function fromReflection(
  310. Zend_Reflection_Docblock_Tag $reflectionTag
  311. )
  312. public function setName($name)
  313. public function getName()
  314. public function setDescription($description)
  315. public function getDescription()
  316. public function generate()
  317. }
  318. ]]></programlisting>
  319. </sect3>
  320. <sect3 id="zend.codegenerator.reference.concrete.php-docblock-tag-param">
  321. <title>Zend_CodeGenerator_Php_DocBlock_Tag_Param</title>
  322. <para>
  323. <classname>Zend_CodeGenerator_Php_DocBlock_Tag_Param</classname>
  324. es una versión especializada de
  325. <classname>Zend_CodeGenerator_Php_DocBlock_Tag</classname>
  326. ,
  327. y representa un parámetro del método. El nombre del tag es por
  328. lo tanto ("param"),
  329. pero debido al formato de este tag de
  330. anotación, es necesaria información adicional a
  331. fin de
  332. generarla: el nombre del parámetro y el tipo de datos que
  333. representa.
  334. </para>
  335. <para>
  336. La
  337. <acronym>API</acronym>
  338. de la clase es la siguiente:
  339. </para>
  340. <programlisting language="php"><![CDATA[
  341. class Zend_CodeGenerator_Php_Docblock_Tag_Param
  342. extends Zend_CodeGenerator_Php_Docblock_Tag
  343. {
  344. public static function fromReflection(
  345. Zend_Reflection_Docblock_Tag $reflectionTagParam
  346. )
  347. public function setDatatype($datatype)
  348. public function getDatatype()
  349. public function setParamName($paramName)
  350. public function getParamName()
  351. public function generate()
  352. }
  353. ]]></programlisting>
  354. </sect3>
  355. <sect3 id="zend.codegenerator.reference.concrete.php-docblock-tag-return">
  356. <title>Zend_CodeGenerator_Php_DocBlock_Tag_Return</title>
  357. <para>
  358. Al igual la variante del tag docblock,
  359. <classname>Zend_CodeGenerator_Php_Docblock_Tab_Return</classname>
  360. es una variante de un tag de anotación para representar el valor
  361. de retorno del
  362. método. En este caso, el nombre del tag de
  363. anotación es conocido ("return"), pero
  364. requiere un tipo de
  365. retorno.
  366. </para>
  367. <para>
  368. La
  369. <acronym>API</acronym>
  370. de la clase es la siguiente:
  371. </para>
  372. <programlisting language="php"><![CDATA[
  373. class Zend_CodeGenerator_Php_Docblock_Tag_Param
  374. extends Zend_CodeGenerator_Php_Docblock_Tag
  375. {
  376. public static function fromReflection(
  377. Zend_Reflection_Docblock_Tag $reflectionTagReturn
  378. )
  379. public function setDatatype($datatype)
  380. public function getDatatype()
  381. public function generate()
  382. }
  383. ]]></programlisting>
  384. </sect3>
  385. <sect3 id="zend.codegenerator.reference.concrete.php-file">
  386. <title>Zend_CodeGenerator_Php_File</title>
  387. <para>
  388. <classname>Zend_CodeGenerator_Php_File</classname>
  389. se utiliza
  390. para generar el contenido íntegro de un archivo que contiene
  391. código
  392. <acronym>PHP</acronym>
  393. . El archivo puede contener clases
  394. o código
  395. <acronym>PHP</acronym>
  396. arbitrario, así como un archivo
  397. de nivel docblock si así lo desea.
  398. </para>
  399. <para>
  400. Cuando se agregan clases al archivo, necesitará pasar o un
  401. array de información para
  402. pasar al constructor
  403. <classname>Zend_CodeGenerator_Php_Class</classname>
  404. , o una
  405. instancia de esa clase. De manera similar, con docblocks, usted
  406. tendrá que
  407. pasar información para que lo consuma el constructor
  408. <classname>Zend_CodeGenerator_Php_Docblock</classname>
  409. o una
  410. instancia de la clase.
  411. </para>
  412. <para>
  413. La
  414. <acronym>API</acronym>
  415. de la clase es la siguiente:
  416. </para>
  417. <programlisting language="php"><![CDATA[
  418. class Zend_CodeGenerator_Php_File extends Zend_CodeGenerator_Php_Abstract
  419. {
  420. public static function fromReflectedFilePath(
  421. $filePath,
  422. $usePreviousCodeGeneratorIfItExists = true,
  423. $includeIfNotAlreadyIncluded = true)
  424. public static function fromReflection(Zend_Reflection_File $reflectionFile)
  425. public function setDocblock(Zend_CodeGenerator_Php_Docblock $docblock)
  426. public function getDocblock()
  427. public function setRequiredFiles($requiredFiles)
  428. public function getRequiredFiles()
  429. public function setClasses(Array $classes)
  430. public function getClass($name = null)
  431. public function setClass($class)
  432. public function setFilename($filename)
  433. public function getFilename()
  434. public function getClasses()
  435. public function setBody($body)
  436. public function getBody()
  437. public function isSourceDirty()
  438. public function generate()
  439. }
  440. ]]></programlisting>
  441. </sect3>
  442. <sect3 id="zend.codegenerator.reference.concrete.php-member-container">
  443. <title>Zend_CodeGenerator_Php_Member_Container</title>
  444. <para>
  445. <classname>Zend_CodeGenerator_Php_Member_Container</classname>
  446. es usado internamente por
  447. <classname>Zend_CodeGenerator_Php_Class</classname>
  448. para
  449. seguir la pista de los los miembros de la clase -- a propiedades
  450. y métodos por
  451. igual. Estos están indexados por nombre,
  452. utilizando las instancias concretas de los
  453. miembros como
  454. valores.
  455. </para>
  456. <para>
  457. La
  458. <acronym>API</acronym>
  459. de la clase es la siguiente:
  460. </para>
  461. <programlisting language="php"><![CDATA[
  462. class Zend_CodeGenerator_Php_Member_Container extends ArrayObject
  463. {
  464. public function __construct($type = self::TYPE_PROPERTY)
  465. }
  466. ]]></programlisting>
  467. </sect3>
  468. <sect3 id="zend.codegenerator.reference.concrete.php-method">
  469. <title>Zend_CodeGenerator_Php_Method</title>
  470. <para>
  471. <classname>Zend_CodeGenerator_Php_Method</classname>
  472. describe un
  473. método de clase, y puede generar tanto el código y el docblock
  474. para el
  475. método. La visibilidad y condición estática, abstracta,
  476. o se puede indicar como
  477. final, por su clase padre,
  478. <classname>Zend_CodeGenerator_Php_Member_Abstract</classname>
  479. .
  480. Finalmente, pueden especificarse los parámetros y valor de
  481. retorno para el método.
  482. </para>
  483. <para>
  484. Pueden establecerse los parámetros usando
  485. <methodname>setParameter()</methodname>
  486. o
  487. <methodname>setParameters()</methodname>
  488. . En cada caso, un
  489. parámetro debe ser un array de información para pasar al
  490. constructor
  491. <classname>Zend_CodeGenerator_Php_Parameter</classname>
  492. o
  493. una instancia de esa clase.
  494. </para>
  495. <para>
  496. La
  497. <acronym>API</acronym>
  498. de la clase es la siguiente:
  499. </para>
  500. <programlisting language="php"><![CDATA[
  501. class Zend_CodeGenerator_Php_Method
  502. extends Zend_CodeGenerator_Php_Member_Abstract
  503. {
  504. public static function fromReflection(
  505. Zend_Reflection_Method $reflectionMethod
  506. )
  507. public function setDocblock(Zend_CodeGenerator_Php_Docblock $docblock)
  508. public function getDocblock()
  509. public function setFinal($isFinal)
  510. public function setParameters(Array $parameters)
  511. public function setParameter($parameter)
  512. public function getParameters()
  513. public function setBody($body)
  514. public function getBody()
  515. public function generate()
  516. }
  517. ]]></programlisting>
  518. </sect3>
  519. <sect3 id="zend.codegenerator.reference.concrete.php-parameter">
  520. <title>Zend_CodeGenerator_Php_Parameter</title>
  521. <para>
  522. <classname>Zend_CodeGenerator_Php_Parameter</classname>
  523. puede
  524. ser utilizada para especificar parámetros del método. Cada
  525. parámetro puede tener
  526. una posición (si no están especificados,
  527. se usarán en el orden que estén registrados
  528. en el método), son
  529. oblogatorios un valor por defecto, un tipo de datos y un nombre
  530. de
  531. parámetro.
  532. </para>
  533. <para>
  534. La
  535. <acronym>API</acronym>
  536. de la clase es la siguiente:
  537. </para>
  538. <programlisting language="php"><![CDATA[
  539. class Zend_CodeGenerator_Php_Parameter extends Zend_CodeGenerator_Php_Abstract
  540. {
  541. public static function fromReflection(
  542. Zend_Reflection_Parameter $reflectionParameter
  543. )
  544. public function setType($type)
  545. public function getType()
  546. public function setName($name)
  547. public function getName()
  548. public function setDefaultValue($defaultValue)
  549. public function getDefaultValue()
  550. public function setPosition($position)
  551. public function getPosition()
  552. public function getPassedByReference()
  553. public function setPassedByReference($passedByReference)
  554. public function generate()
  555. }
  556. ]]></programlisting>
  557. <para>
  558. There are several problems that might occur when trying to set <constant>NULL</constant>, booleans or
  559. arrays as default values. For this the value holder object
  560. <classname>Zend_CodeGenerator_Php_ParameterDefaultValue</classname>
  561. can be used,
  562. for example:
  563. </para>
  564. <programlisting language="php"><![CDATA[
  565. $parameter = new Zend_CodeGenerator_Php_Parameter();
  566. $parameter->setDefaultValue(
  567. new Zend_CodeGenerator_Php_Parameter_DefaultValue("null")
  568. );
  569. $parameter->setDefaultValue(
  570. new Zend_CodeGenerator_Php_Parameter_DefaultValue("array('foo', 'bar')")
  571. );
  572. ]]></programlisting>
  573. <para>
  574. Internally
  575. <methodname>setDefaultValue()</methodname>
  576. also converts the values
  577. which can't be expressed in
  578. <acronym>PHP</acronym>
  579. into the value holder.
  580. </para>
  581. </sect3>
  582. <sect3 id="zend.codegenerator.reference.concrete.php-property">
  583. <title>Zend_CodeGenerator_Php_Property</title>
  584. <para>
  585. <classname>Zend_CodeGenerator_Php_Property</classname>
  586. describe
  587. una propiedad de clase, que puede ser tanto una constante o una
  588. variable. En
  589. cada caso, la propiedad puede tener un valor
  590. predeterminado asociado con ella.
  591. Además, la visibilidad de las
  592. propiedades de la variable puede ser establecida por la
  593. clase
  594. padre,
  595. <classname>Zend_CodeGenerator_Php_Member_Abstract</classname>
  596. .
  597. </para>
  598. <para>
  599. La
  600. <acronym>API</acronym>
  601. de la clase es la siguiente:
  602. </para>
  603. <programlisting language="php"><![CDATA[
  604. class Zend_CodeGenerator_Php_Property
  605. extends Zend_CodeGenerator_Php_Member_Abstract
  606. {
  607. public static function fromReflection(
  608. Zend_Reflection_Property $reflectionProperty
  609. )
  610. public function setConst($const)
  611. public function isConst()
  612. public function setDefaultValue($defaultValue)
  613. public function getDefaultValue()
  614. public function generate()
  615. }
  616. ]]></programlisting>
  617. </sect3>
  618. </sect2>
  619. </sect1>