coding_standard.xml 53 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 18940 -->
  3. <!-- Reviewed: no -->
  4. <appendix id="coding-standard">
  5. <title>Estándares de codificación de Zend Framework para PHP</title>
  6. <sect1 id="coding-standard.overview">
  7. <title>Introducción</title>
  8. <sect2 id="coding-standard.overview.scope">
  9. <title>Alcance</title>
  10. <para>
  11. Este documento provee las pautas para el formato del código y
  12. la documentación a
  13. personas y equipos que contribuyan con
  14. Zend Framework. Muchos de los desarrolladores
  15. que usan
  16. Zend Framework han encontrado útiles estos estándares debido
  17. a que el estilo
  18. de su código permanece consistente con otros
  19. códigos fuente basados en Zend
  20. Framework.
  21. También debe resaltarse que especificar completamente los
  22. estándares de
  23. código requiere un esfuerzo significativo.
  24. </para>
  25. <note>
  26. <para>
  27. Nota: A veces, los desarrolladores consideran el establecimiento
  28. de estándares más importante que lo que el estándar sugiere
  29. realmente al nivel más detallado de diseño.
  30. Estas pautas en los estándares de código de Zend Framework
  31. han demostrado funcionar bien en otros projectos de Zend Framework.
  32. Puede modificar estos estándares o usarlos en conformidad con
  33. los términos de nuestra
  34. <ulink url="http://framework.zend.com/license">licencia</ulink>
  35. </para>
  36. </note>
  37. <para>
  38. Temas incluídos en los estándares de código de Zend Framework:
  39. </para>
  40. <itemizedlist>
  41. <listitem>
  42. <para>
  43. Dar formato a archivos
  44. <acronym>PHP</acronym>
  45. </para>
  46. </listitem>
  47. <listitem>
  48. <para>Convenciones de nombrado</para>
  49. </listitem>
  50. <listitem>
  51. <para>Estilo de código</para>
  52. </listitem>
  53. <listitem>
  54. <para>Documentación integrada</para>
  55. </listitem>
  56. </itemizedlist>
  57. </sect2>
  58. <sect2 id="coding-standard.overview.goals">
  59. <title>Objetivos</title>
  60. <para>
  61. Los estándares de código resultan importantes en cualquier
  62. proyecto de desarrollo,
  63. pero son especialmente importantes
  64. cuando muchos desarrolladores trabajan en el mismo
  65. proyecto.
  66. Los estándares de código ayudan a asegurar que el código tenga
  67. una alta
  68. calidad, menos errores, y pueda ser mantenido fácilmente.
  69. </para>
  70. </sect2>
  71. </sect1>
  72. <sect1 id="coding-standard.php-file-formatting">
  73. <title>Formato de archivos PHP</title>
  74. <sect2 id="coding-standard.php-file-formatting.general">
  75. <title>General</title>
  76. <para>
  77. Para archivos que contengan únicamente código
  78. <acronym>PHP</acronym>
  79. ,
  80. la etiqueta de cierre ("?>") no está permitida.
  81. No es requerida por
  82. <acronym>PHP</acronym>
  83. , y omitirla evita la inyección de
  84. espacios en blanco en la respuesta.
  85. </para>
  86. <note>
  87. <para>
  88. <emphasis>IMPORTANTE:</emphasis>
  89. La inclusión de datos binarios
  90. arbitrarios permitidos por
  91. <methodname>__HALT_COMPILER()</methodname>
  92. está prohibida en los archivos
  93. <acronym>PHP</acronym>
  94. de Zend Framework,
  95. así como en cualquier fichero derivado.
  96. El uso de esta característica sólo está permitido en algunos
  97. scripts de instalación.
  98. </para>
  99. </note>
  100. </sect2>
  101. <sect2 id="coding-standard.php-file-formatting.indentation">
  102. <title>Identación</title>
  103. <para>La identación suele estar compuesta por 4 espacios.
  104. Las tabulaciones no están permitidas.</para>
  105. </sect2>
  106. <sect2 id="coding-standard.php-file-formatting.max-line-length">
  107. <title>Tamaño máximo de línea</title>
  108. <para>
  109. La longitud recomendable para una línea de código es de
  110. 80 caracteres. Esto significa
  111. que los desarrolladores de
  112. Zend deberían intentar mantener cada línea de su código
  113. por
  114. debajo de los 80 caracteres, siempre que sea posible.
  115. No obstante, líneas más
  116. largas pueden ser aceptables
  117. en algunas situaciones. El tamaño máximo de cualquier
  118. línea
  119. de código
  120. <acronym>PHP</acronym>
  121. es de 120 caracteres.
  122. </para>
  123. </sect2>
  124. <sect2 id="coding-standard.php-file-formatting.line-termination">
  125. <title>Final de línea</title>
  126. <para>
  127. El Final de Línea sigue la convención de archivos de texto Unix.
  128. Las líneas deben
  129. acabar con un carácter linefeed (LF).
  130. Los caracteres Linefeed están representados con
  131. el número 10
  132. ordinal, o el número 0x0A hexadecimal.
  133. </para>
  134. <para>
  135. Nota: No use retornos de carro (carriage returns, CR) como en
  136. las fuentes de Apple
  137. (0x0D) o la combinación de retorno de
  138. carro - linefeed (
  139. <acronym>CRLF</acronym>
  140. ) estandar para sistemas operativos
  141. Windows (0x0D, 0x0A).
  142. </para>
  143. </sect2>
  144. </sect1>
  145. <sect1 id="coding-standard.naming-conventions">
  146. <title>Convenciones de Nombres</title>
  147. <sect2 id="coding-standard.naming-conventions.classes">
  148. <title>Clases</title>
  149. <para>
  150. Zend Framework se estandariza una convencion de nombres de
  151. clases donde los nombres
  152. de las clases apuntan directamente a
  153. las carpetas en las que estan contenidas.
  154. La
  155. carpeta raiz de la biblioteca estandar de Zend Framework es la carpeta
  156. "Zend/",
  157. mientras que la carpeta raíz de las bibliotecas
  158. extra de Zend Framework es la carpeta
  159. "ZendX/".
  160. Todas las clases de Zend Framework están almacenadas
  161. jerárquicamente bajo
  162. estas carpetas raíz.
  163. </para>
  164. <para>
  165. Los nombres de clases pueden contener sólo caracteres
  166. alfanuméricos. Los números
  167. están permitidos en los nombres de
  168. clase, pero desaconsejados en la mayoría de casos.
  169. Las barras bajas (_) están permitidas solo como separador de
  170. ruta (el archivo "
  171. <filename>Zend/Db/Table.php</filename>
  172. " debe apuntar al nombre de
  173. clase "
  174. <classname>Zend_Db_Table</classname>
  175. ").
  176. </para>
  177. <para>
  178. Si el nombre de una clase esta compuesto por mas de una palabra,
  179. la primera letra de
  180. cada palabra debe aparecer en mayúsculas.
  181. Poner en mayúsculas las letras siguientes
  182. no está permitido,
  183. ej: "Zend_PDF" no está permitido, mientras que "
  184. <classname>Zend_Pdf</classname>
  185. "
  186. es admisible.
  187. </para>
  188. <para>
  189. Estas convenciones definen un mecanismo de pseudo-espacio de
  190. nombres para Zend
  191. Framework. Zend Framework adoptará la
  192. funcionalidad
  193. <acronym>PHP</acronym>
  194. de espacio de nombres cuando esté disponible
  195. y sea factible su uso en las
  196. aplicaciones de nuestros
  197. desarrolladores.
  198. </para>
  199. <para>
  200. Vea los nombres de clase en las bibliotecas estandar y
  201. adicionales (extras) como
  202. ejemplos de esta convención de nombres.
  203. </para>
  204. <note>
  205. <para>
  206. <emphasis>IMPORTANTE:</emphasis>
  207. El código que deba distribuirse
  208. junto a las bibliotecas de Zend Framework, pero no forma parte de las bibliotecas
  209. estándar o extras de Zend (e.g.: código o bibliotecas
  210. que no estén distribuídas por Zend) no puede empezar nunca por
  211. "Zend_" o "ZendX_".
  212. </para>
  213. </note>
  214. </sect2>
  215. <sect2 id="coding-standard.naming-conventions.abstracts">
  216. <title>Clases Abstractas </title>
  217. <para>
  218. En general, las clases abstractas siguen las mismas convenciones que las
  219. <link linkend="coding-standard.naming-conventions.classes">clases</link>
  220. ,
  221. con una regla adicional: Los nombres de las clases abstractas deben acabar con el
  222. término, "Abstract",
  223. y ese término no debe ser precedida por un guión bajo. Ejemplo,
  224. <classname>Zend_Controller_Plugin_Abstract</classname>
  225. es considerado un nombre no válido,
  226. pero
  227. <classname>Zend_Controller_PluginAbstract</classname>
  228. o
  229. <classname>Zend_Controller_Plugin_PluginAbstract</classname>
  230. serian nombres válidos.
  231. </para>
  232. <note>
  233. <para>
  234. Esta convención de nombres es nuevo con la versión 1.9.0 de Zend Framework.
  235. Las clases que preceden aquella versión no pueden seguir esta regla, pero serán
  236. renombradas
  237. en el futuro a fin de cumplir la regla.
  238. </para>
  239. </note>
  240. </sect2>
  241. <sect2 id="coding-standard.naming-conventions.interfaces">
  242. <title>Interfaces</title>
  243. <para>
  244. En general, las clases abstractas siguen las mismas convenciones que las
  245. <link linkend="coding-standard.naming-conventions.classes">classes</link>
  246. ,
  247. con una regla adicional: Los nombres de las interfaces opcionalmente pueden acabar con el término,
  248. "Interface",pero término no debe ser precedida por un guión bajo. Ejemplo,
  249. <classname>Zend_Controller_Plugin_Interface</classname>
  250. es considerado un nombre no válido,
  251. pero
  252. <classname>Zend_Controller_PluginInterface</classname>
  253. o
  254. <classname>Zend_Controller_Plugin_PluginInterface</classname>
  255. serian nombres válidos.
  256. </para>
  257. <para>
  258. Si bien esta regla no es necesaria, se recomienda encarecidamente su uso,
  259. ya que
  260. proporciona una buena refrencia visual a los desarrolladores, como saber
  261. que archivos
  262. contienen interfaces en lugar de clases.
  263. </para>
  264. <note>
  265. <para>
  266. Esta convención de nombres es nuevo con la versión 1.9.0 de Zend Framework.
  267. Las clases que preceden aquella versión no pueden seguir esta regla, pero serán
  268. renombradas
  269. en el futuro a fin de cumplir la regla.
  270. </para>
  271. </note>
  272. </sect2>
  273. <sect2 id="coding-standard.naming-conventions.filenames">
  274. <title>Nombres de Archivo</title>
  275. <para>
  276. Para cualquier otro archivo, sólo caracteres alfanuméricos,
  277. barras bajas (_) y
  278. guiones (-) están permitidos.
  279. Los espacios en blanco están estrictamente prohibidos.
  280. </para>
  281. <para>
  282. Cualquier archivo que contenga código
  283. <acronym>PHP</acronym>
  284. debe terminar con la
  285. extensión "
  286. <filename>.php</filename>
  287. ", con la excepción de los scripts de la vista.
  288. Los siguientes ejemplos muestran
  289. nombres de archivo admisibles
  290. para clases de Zend Framework..:
  291. </para>
  292. <programlisting language="php"><![CDATA[
  293. Zend/Db.php
  294. Zend/Controller/Front.php
  295. Zend/View/Helper/FormRadio.php
  296. ]]>
  297. </programlisting>
  298. <para>
  299. Los nombres de archivo deben apuntar a nombres de clases como
  300. se describe arriba.
  301. </para>
  302. </sect2>
  303. <sect2 id="coding-standard.naming-conventions.functions-and-methods">
  304. <title>Funciones y Métodos</title>
  305. <para>
  306. Los nombres de funciones pueden contener únicamente caracteres
  307. alfanuméricos. Las
  308. guiones bajos (_) no estan permitidos.
  309. Los números están permitidos en los nombres de
  310. función pero no
  311. se aconseja en la mayoría de los casos.
  312. </para>
  313. <para>
  314. Los nombres de funciones deben empezar siempre con una letra
  315. minúscula. Cuando un
  316. nombre de función consiste en más de una
  317. palabra, la primera letra de cada nueva
  318. palabra debe estar en
  319. mayúsculas. Esto es llamado comúnmente como formato
  320. "camelCase".
  321. </para>
  322. <para>
  323. Por norma general, se recomienda la elocuencia. Los nombres de
  324. función deben ser lo
  325. suficientemente elocuentes como para
  326. describir su propósito y comportamiento.
  327. </para>
  328. <para>
  329. Estos son ejemplos de nombres de funciones admisibles:
  330. </para>
  331. <programlisting language="php"><![CDATA[
  332. filterInput()
  333. getElementById()
  334. widgetFactory()
  335. ]]>
  336. </programlisting>
  337. <para>
  338. Para la programación orientada a objetos, los métodos de acceso para
  339. las instancias
  340. o variables estáticas deben ir antepuestos con un
  341. "get" o un "set". Al implementar el
  342. patron de diseño,
  343. tales como el patrón singleton o el patrón factory, el nombre
  344. del
  345. método debe contener en la práctica el nombre del patrón
  346. para describir su
  347. comportamiento de forma más completa.
  348. </para>
  349. <para>
  350. Para el caso en que los métodos son declarados con el modificador
  351. "private" o
  352. "protected", el primer carácter del nombre de la
  353. variable debe ser una barra baja
  354. (_). Este es el único uso
  355. admisible de una barra baja en un nombre de método.
  356. Los
  357. métodos declarados como públicos no deberían contener nunca
  358. una barra baja.
  359. </para>
  360. <para>
  361. Las funciones de alcance global (también llamadas "funciones
  362. flotantes") están
  363. permitidas pero desaconsejadas en la mayoría
  364. de los casos.
  365. Considere envolver esas
  366. funciones en una clase estática.
  367. </para>
  368. </sect2>
  369. <sect2 id="coding-standard.naming-conventions.variables">
  370. <title>Variables</title>
  371. <para>
  372. Los nombres de variables pueden contener caracteres
  373. alfanuméricos. Las barras bajas
  374. (_) no están permitidas.
  375. Los números están permitidos en los nombres de variable pero
  376. no
  377. se aconseja en la mayoría de los casos.
  378. </para>
  379. <para>
  380. Para las variables de instancia que son declaradas con el
  381. modificador "private" o
  382. "protected", el primer carácter de la
  383. variable debe ser una única barra baja (_).
  384. Este es el único caso admisible de una barra baja en el nombre
  385. de una variable. Las
  386. variables declaradas como "public" no
  387. pueden empezar nunca por barra baja.
  388. </para>
  389. <para>
  390. Al igual que los nombres de funciones (ver sección 3.3),
  391. los nombres de variables
  392. deben empezar siempre con una letra en
  393. minúscula y seguir la convención "camelCaps".
  394. </para>
  395. <para>
  396. Por norma general, se recomienda la elocuencia. Las variables
  397. deberían ser siempre
  398. tan elocuentes como prácticas para
  399. describir los datos que el desarrollador pretende
  400. almacenar en
  401. ellas. Variables escuetas como "
  402. <varname>$i</varname>
  403. " y "
  404. <varname>$n</varname>
  405. " están desaconsejadas,
  406. salvo para el contexto de los bucles más pequeños.
  407. Si un bucle
  408. contiene más de 20 líneas de código, las variables
  409. de índice deberían tener nombres
  410. más descriptivos.
  411. </para>
  412. </sect2>
  413. <sect2 id="coding-standard.naming-conventions.constants">
  414. <title>Constantes</title>
  415. <para>
  416. Las constantes pueden contener tanto caracteres alfanuméricos
  417. como barras bajas
  418. (_). Los números están permitidos.
  419. </para>
  420. <para>
  421. Todos las letras pertenecientes al nombre de una constante
  422. deben aparecer en
  423. mayúsculas.
  424. </para>
  425. <para>
  426. Las palabras dentro del nombre de una constante deben separarse
  427. por barras bajas (_).
  428. Por ejemplo,
  429. <constant>EMBED_SUPPRESS_EMBED_EXCEPTION</constant>
  430. está permitido, pero
  431. <constant>EMBED_SUPPRESSEMBEDEXCEPTION</constant>
  432. no.
  433. </para>
  434. <para>
  435. Las constantes deben ser definidas como miembros de clase con
  436. el modificador
  437. "const". Definir constantes en el alcance global
  438. con la función "define" está
  439. permitido pero no recomendado.
  440. </para>
  441. </sect2>
  442. </sect1>
  443. <sect1 id="coding-standard.coding-style">
  444. <title>Estilo de código</title>
  445. <sect2 id="coding-standard.coding-style.php-code-demarcation">
  446. <title>Demarcación de código PHP</title>
  447. <para>
  448. El código
  449. <acronym>PHP</acronym>
  450. debe estar delimitado siempre por la forma
  451. completa de las etiquetas
  452. <acronym>PHP</acronym>
  453. estándar:
  454. </para>
  455. <programlisting language="php"><![CDATA[
  456. <?php
  457. ?>
  458. ]]>
  459. </programlisting>
  460. <para>
  461. Las etiquetas cortas (short tags) no se permiten nunca.
  462. Para archivos que contengan
  463. únicamente código
  464. <acronym>PHP</acronym>
  465. , la etiqueta
  466. de cierrre debe omitirse siempre
  467. (Ver
  468. <xref linkend="coding-standard.php-file-formatting.general"/>
  469. ).
  470. </para>
  471. </sect2>
  472. <sect2 id="coding-standard.coding-style.strings">
  473. <title>Cadenas de Caracteres </title>
  474. <sect3 id="coding-standard.coding-style.strings.literals">
  475. <title>Cadenas Literales de Caracteres</title>
  476. <para>
  477. Cuando una cadena es literal (no contiene sustitución de
  478. variables), el
  479. apóstrofo o "comilla" debería ser usado
  480. siempre para delimitar la cadena:
  481. </para>
  482. <programlisting language="php"><![CDATA[
  483. $a = 'Example String';
  484. ]]></programlisting>
  485. </sect3>
  486. <sect3 id="coding-standard.coding-style.strings.literals-containing-apostrophes">
  487. <title>Cadenas Literales de Caracteres que Contengan Apóstrofos</title>
  488. <para>
  489. Cuando una cadena literal de caracteres contega apóstrofos,
  490. es permitido
  491. delimitar la cadena de caracteres con "comillas dobles".
  492. Esto es especialmente
  493. útil para sentencias
  494. <constant>SQL</constant>
  495. :
  496. </para>
  497. <programlisting language="php"><![CDATA[
  498. $sql = "SELECT `id`, `name` from `people` WHERE `name`='Fred' OR `name`='Susan'";
  499. ]]></programlisting>
  500. <para>
  501. En esta sintáxis es preferible escapar apóstrofes,
  502. ya que es mucho más fácil de leer.
  503. </para>
  504. </sect3>
  505. <sect3 id="coding-standard.coding-style.strings.variable-substitution">
  506. <title>Sustitución de Variables</title>
  507. <para>
  508. La sustitución de variables está permitida en cualquiera
  509. de estas formas:
  510. </para>
  511. <programlisting language="php"><![CDATA[
  512. $greeting = "Hello $name, welcome back!";
  513. $greeting = "Hello {$name}, welcome back!";
  514. ]]></programlisting>
  515. <para>
  516. Por consistencia, esta forma no está permitida:
  517. <programlisting language="php"><![CDATA[
  518. $greeting = "Hello ${name}, welcome back!";
  519. ]]></programlisting>
  520. </para>
  521. </sect3>
  522. <sect3 id="coding-standard.coding-style.strings.string-concatenation">
  523. <title>Concatenación de cadenas</title>
  524. <para>
  525. Las cadenas deben ser concatenadas usando el operador
  526. punto ("."). Un espacio
  527. debe añadirse siempre antes y
  528. después del operador "." para mejorar la
  529. legibilidad:
  530. </para>
  531. <programlisting language="php"><![CDATA[
  532. $company = 'Zend' . ' ' . 'Technologies';
  533. ]]></programlisting>
  534. <para>
  535. Al concatenar cadenas con el operador ".", se recomienda
  536. partir la sentencia en
  537. múltiples líneas para mejorar la
  538. legibilidad. En estos casos, cada linea sucesiva
  539. debe
  540. llevar un margen de espacios en blanco de forma que el
  541. operador "." está
  542. alineado bajo el operador "=":
  543. </para>
  544. <programlisting language="php"><![CDATA[
  545. $sql = "SELECT `id`, `name` FROM `people` "
  546. . "WHERE `name` = 'Susan' "
  547. . "ORDER BY `name` ASC ";
  548. ]]></programlisting>
  549. </sect3>
  550. </sect2>
  551. <sect2 id="coding-standard.coding-style.arrays">
  552. <title>Arrays</title>
  553. <sect3 id="coding-standard.coding-style.arrays.numerically-indexed">
  554. <title>Arrays Indexados Numéricamente</title>
  555. <para>No están permitidos números negativos como índices.</para>
  556. <para>
  557. Un array indexado puede empezar por cualquier valor no
  558. negativo, sin embargo,
  559. no se recomiendan índices base
  560. distintos a 0.
  561. </para>
  562. <para>
  563. Al declarar arrays indexados con la función
  564. <methodname>array</methodname>
  565. , un espacio de separación deben
  566. añadirse después de cada coma, para mejorar la
  567. legibilidad:
  568. </para>
  569. <programlisting language="php"><![CDATA[
  570. $sampleArray = array(1, 2, 3, 'Zend', 'Studio');
  571. ]]></programlisting>
  572. <para>
  573. Se permite declarar arrays indexados multilínea usando la
  574. construcción "array".
  575. En este caso, cada línea sucesiva debe ser tabulada con
  576. cuatro espacios de forma
  577. que el principio de cada línea
  578. está alineado:
  579. </para>
  580. <programlisting language="php"><![CDATA[
  581. $sampleArray = array(1, 2, 3, 'Zend', 'Studio',
  582. $a, $b, $c,
  583. 56.44, $d, 500);
  584. ]]></programlisting>
  585. <para>
  586. Alternativamente, el elemento inicial del array puede comenzar en la siguiente
  587. línea. Si es así,
  588. debe ser alineado en un nivel de sangría superior a la línea
  589. que contiene
  590. la declaración del array, y todas las sucesivas líneas deben tener
  591. la mismo
  592. indentación, el paréntesis de cierre debe ser en una nueva línea al
  593. mismo
  594. nivel de indentación que la línea que contiene la declaración del array:
  595. </para>
  596. <programlisting language="php"><![CDATA[
  597. $sampleArray = array(
  598. 1, 2, 3, 'Zend', 'Studio',
  599. $a, $b, $c,
  600. 56.44, $d, 500,
  601. );
  602. ]]></programlisting>
  603. <para>
  604. Al utilizar esta última declaración, recomendamos la utilización de una coma
  605. detrás de
  606. el último elemento de la matriz, lo que minimizará el impacto de añadir
  607. nuevos elementos
  608. en las siguientes líneas, y ayuda a garantizar que no se
  609. produzcan errores debido
  610. a la falta de una coma.
  611. </para>
  612. </sect3>
  613. <sect3 id="coding-standard.coding-style.arrays.associative">
  614. <title>Arrays Asociativos</title>
  615. <para>
  616. Al declarar arrays asociativos con la construcción
  617. <methodname>array</methodname>
  618. , se recomienda partir la declaración
  619. en múltiples líneas. En este caso, cada
  620. línea sucesiva debe
  621. ser tabuladas con cuatro espacios de forma que tanto las
  622. llaves como los valores están alineados:
  623. </para>
  624. <programlisting language="php"><![CDATA[
  625. $sampleArray = array('firstKey' => 'firstValue',
  626. 'secondKey' => 'secondValue');
  627. ]]></programlisting>
  628. <para>
  629. Alternativamente, el elemento inicial del array puede comenzar en la siguiente
  630. línea. Si es así,
  631. debe ser alineado en un nivel de sangría superior a la línea
  632. que contiene
  633. la declaración del array, y todas las sucesivas líneas deben tener
  634. la mismo
  635. indentación, el paréntesis de cierre debe ser en una nueva línea al
  636. mismo
  637. nivel de indentación que la línea que contiene la declaración del array:
  638. Para
  639. mejor legibilidad, los diversos operadores de asiganción "=>" deben ser
  640. rellenados
  641. con espacios en blanco hasta que se alinien.
  642. </para>
  643. <programlisting language="php"><![CDATA[
  644. $sampleArray = array(
  645. 'firstKey' => 'firstValue',
  646. 'secondKey' => 'secondValue',
  647. );
  648. ]]></programlisting>
  649. <para>
  650. Al utilizar esta última declaración, recomendamos la utilización de una coma
  651. detrás de
  652. el último elemento de la matriz, lo que minimizará el impacto de añadir
  653. nuevos elementos
  654. en las siguientes líneas, y ayuda a garantizar que no se
  655. produzcan errores debido
  656. a la falta de una coma.
  657. </para>
  658. </sect3>
  659. </sect2>
  660. <sect2 id="coding-standard.coding-style.classes">
  661. <title>Clases</title>
  662. <sect3 id="coding-standard.coding-style.classes.declaration">
  663. <title>Declaración de clases</title>
  664. <para>
  665. Las Clases deben ser nombradas de acuerdo a las
  666. convencion de nombres de Zend
  667. Framework.
  668. </para>
  669. <para>
  670. La llave "{" deberá escribirse siempre en la línea debajo
  671. del nombre de la
  672. clase ("one true brace").
  673. </para>
  674. <para>
  675. Cada clase debe contener un bloque de documentación acorde
  676. con el estándar de
  677. PHPDocumentor.
  678. </para>
  679. <para>
  680. Todo el código contenido en una clase debe ser separado
  681. con cuatro espacios.
  682. </para>
  683. <para>
  684. Únicamente una clase está permitida por archivo
  685. <acronym>PHP</acronym>
  686. .
  687. </para>
  688. <para>
  689. Incluir código adicional en archivos de clase está
  690. permitido pero esta
  691. desaconsejado.
  692. En archivos de ese tipo, dos líneas en blanco deben
  693. separar la
  694. clase de cualquier código
  695. <acronym>PHP</acronym>
  696. adicional en el
  697. archivo de clase.
  698. </para>
  699. <para>
  700. A continuación se muestra un ejemplo de una declaración de
  701. clase que es
  702. permitida:
  703. </para>
  704. <programlisting language="php"><![CDATA[
  705. /**
  706. * Bloque de Documentación aquí
  707. */
  708. class SampleClass
  709. {
  710. // el contenido de la clase
  711. // debe separarse con cuatro espacios
  712. }
  713. ]]></programlisting>
  714. <para>
  715. Las clases que extiendan otras clases o interfaces deberían
  716. declarar sus
  717. dependencias en la misma línea siempre que sea posible.
  718. </para>
  719. <programlisting language="php"><![CDATA[
  720. class SampleClass extends FooAbstract implements BarInterface
  721. {
  722. }
  723. ]]></programlisting>
  724. <para>
  725. Si como resultado de esas declaraciones, la longitud de la línea excede la
  726. longitud del
  727. <link linkend="coding-standard.php-file-formatting.max-line-length">Tamaño máximo de línea</link>
  728. ,
  729. se debe romper la línea antes de la palabra clave "extends" y / o "implements"
  730. e indentarlo con un nivel de indentación (4 espacios).
  731. </para>
  732. <programlisting language="php"><![CDATA[
  733. class SampleClass
  734. extends FooAbstract
  735. implements BarInterface
  736. {
  737. }
  738. ]]></programlisting>
  739. <para>
  740. If the class implements multiple interfaces and the declaration exceeds the
  741. maximum line length, break after each comma separating the interfaces, and
  742. indent the interface names such that they align.
  743. </para>
  744. <programlisting language="php"><![CDATA[
  745. class SampleClass
  746. implements BarInterface,
  747. BazInterface
  748. {
  749. }
  750. ]]></programlisting>
  751. </sect3>
  752. <sect3 id="coding-standard.coding-style.classes.member-variables">
  753. <title>Variables de miembros de clase</title>
  754. <para>
  755. Las variables de miembros de clase deben ser nombradas de
  756. acuerdo con las
  757. conveciones de nombrado de variables de
  758. Zend Framework.
  759. </para>
  760. <para>
  761. Cualquier variable declarada en una clase debe ser listada
  762. en la parte superior
  763. de la clase, por encima de las
  764. declaraciones de cualquier método.
  765. </para>
  766. <para>
  767. La construcción
  768. <emphasis>var</emphasis>
  769. no está permitido.
  770. Las variables de miembro siempre declaran su visibilidad
  771. usando uno los modificadores
  772. <property>private</property>
  773. ,
  774. <property>protected</property>
  775. , o
  776. <property>public</property>.
  777. Dar acceso a las variables de miembro declarándolas
  778. directamente como public está
  779. permitido pero no se aconseja
  780. en favor de accesor methods (set &amp; get).
  781. </para>
  782. </sect3>
  783. </sect2>
  784. <sect2 id="coding-standard.coding-style.functions-and-methods">
  785. <title>Funciones y Métodos</title>
  786. <sect3 id="coding-standard.coding-style.functions-and-methods.declaration">
  787. <title>Declaración de Funciones y Métodos</title>
  788. <para>
  789. Las Funciones deben ser nombradas de acuerdo a las
  790. convenciones de nombrado de
  791. Zend Framework.
  792. </para>
  793. <para>
  794. Los métodos dentro de clases deben declarar siempre su
  795. visibilidad usando un
  796. modificador
  797. <property>private</property>
  798. ,
  799. <property>protected</property>
  800. , o
  801. <property>public</property>
  802. .
  803. </para>
  804. <para>
  805. Como en las clases, la llave "{" debe ser escrita en la
  806. línea siguiente al
  807. nombre de la función ("one true brace"
  808. form). No está permitido un espacio entre
  809. el nombre de la
  810. función y el paróntesis de apertura para los argumentos.
  811. </para>
  812. <para>
  813. Las funciones de alcance global no están permitidas.
  814. </para>
  815. <para>
  816. Lo siguiente es un ejemplo de una declaración admisible de
  817. una función en una
  818. clase:
  819. </para>
  820. <programlisting language="php"><![CDATA[
  821. /**
  822. * Bloque de Documentación aquí
  823. */
  824. class Foo
  825. {
  826. /**
  827. * Bloque de Documentación aquí
  828. */
  829. public function bar()
  830. {
  831. // el contenido de la función
  832. // debe separarse con cuatro espacios
  833. }
  834. }
  835. ]]></programlisting>
  836. <para>
  837. In cases where the argument list exceeds the
  838. <link linkend="coding-standard.php-file-formatting.max-line-length">maximum line
  839. length</link>
  840. , you may introduce line breaks. Additional arguments to the
  841. function or method
  842. must be indented one additional level beyond the function
  843. or method declaration.
  844. A line break should then occur before the closing
  845. argument paren, which should
  846. then be placed on the same line as the opening
  847. brace of the function or method
  848. with one space separating the two, and at the
  849. same indentation level as the
  850. function or method declaration. The following is
  851. an example of one such
  852. situation:
  853. </para>
  854. <programlisting language="php"><![CDATA[
  855. /**
  856. * Documentation Block Here
  857. */
  858. class Foo
  859. {
  860. /**
  861. * Documentation Block Here
  862. */
  863. public function bar($arg1, $arg2, $arg3,
  864. $arg4, $arg5, $arg6
  865. ) {
  866. // all contents of function
  867. // must be indented four spaces
  868. }
  869. }
  870. ]]></programlisting>
  871. <note>
  872. <para>
  873. <emphasis>NOTA:</emphasis>
  874. El paso por referencia es el único mecanismo de paso de
  875. parámetros permitido en una declaración de método.
  876. </para>
  877. </note>
  878. <programlisting language="php"><![CDATA[
  879. /**
  880. * Bloque de Documentación aquí
  881. */
  882. class Foo
  883. {
  884. /**
  885. * Bloque de Documentación aquí
  886. */
  887. public function bar(&$baz)
  888. {}
  889. }
  890. ]]></programlisting>
  891. <para>
  892. La llamada por referencia está estrictamente prohibida.
  893. </para>
  894. <para>
  895. El valor de retorno no debe estar indicado entre
  896. paréntesis. Esto podría
  897. afectar a la legibilidad, además de
  898. romper el código si un método se modifica
  899. posteriormente
  900. para que devuelva por referencia.
  901. </para>
  902. <programlisting language="php"><![CDATA[
  903. /**
  904. * Bloque de Documentación aquí
  905. */
  906. class Foo
  907. {
  908. /**
  909. * INCORRECTO
  910. */
  911. public function bar()
  912. {
  913. return($this->bar);
  914. }
  915. /**
  916. * CORRECTO
  917. */
  918. public function bar()
  919. {
  920. return $this->bar;
  921. }
  922. }
  923. ]]></programlisting>
  924. </sect3>
  925. <sect3 id="coding-standard.coding-style.functions-and-methods.usage">
  926. <title>Uso de Funciones y Métodos</title>
  927. <para>
  928. Los argumentos de la función tendrían que estar separados
  929. por un único espacio
  930. posterior después del delimitador coma.
  931. A continuación se muestra un ejemplo de
  932. una invocación
  933. admisible de una función que recibe tres argumentos:
  934. </para>
  935. <programlisting language="php"><![CDATA[
  936. threeArguments(1, 2, 3);
  937. ]]></programlisting>
  938. <para>
  939. La llamada por referencia está estrictamente prohibida.
  940. Vea la sección de
  941. declaraciones de funciones para el método
  942. correcto de pasar argumentos por
  943. referencia.
  944. </para>
  945. <para>
  946. Al pasar arrays como argumentos a una función, la llamada
  947. a la función puede
  948. incluir el indicador "hint" y puede
  949. separarse en múltiples líneas para aumentar
  950. la legibilidad.
  951. En esos casos, se aplican las pautas normales para escribir
  952. arrays:
  953. </para>
  954. <programlisting language="php"><![CDATA[
  955. threeArguments(array(1, 2, 3), 2, 3);
  956. threeArguments(array(1, 2, 3, 'Zend', 'Studio',
  957. $a, $b, $c,
  958. 56.44, $d, 500), 2, 3);
  959. threeArguments(array(
  960. 1, 2, 3, 'Zend', 'Studio',
  961. $a, $b, $c,
  962. 56.44, $d, 500
  963. ), 2, 3);
  964. ]]></programlisting>
  965. </sect3>
  966. </sect2>
  967. <sect2 id="coding-standard.coding-style.control-statements">
  968. <title>Sentencias de Control</title>
  969. <sect3 id="coding-standard.coding-style.control-statements.if-else-elseif">
  970. <title>If/Else/Elseif</title>
  971. <para>
  972. Las sentencias de control basadas en las construcciones
  973. <emphasis>if</emphasis>
  974. y
  975. <emphasis>elseif</emphasis>
  976. deben tener un solo
  977. espacio en blanco antes del paréntesis de apertura del
  978. condicional y un solo espacio en blanco después del
  979. paréntesis de cierre.
  980. </para>
  981. <para>
  982. Dentro de las sentencias condicionales entre paréntesis,
  983. los operadores deben
  984. separarse con espacios, por legibilidad.
  985. Se aconseja el uso de paréntesis
  986. internos para mejorar la
  987. agrupación lógica en expresiones condicionales más
  988. largas.
  989. </para>
  990. <para>
  991. La llave de apertura "{" se escribe en la misma línea que
  992. la sentencia
  993. condicional. La llave de cierre "}" se escribe
  994. siempre en su propia línea.
  995. Cualquier contenido dentro de
  996. las llaves debe separarse con cuatro espacios en
  997. blanco.
  998. </para>
  999. <programlisting language="php"><![CDATA[
  1000. if ($a != 2) {
  1001. $a = 2;
  1002. }
  1003. ]]></programlisting>
  1004. <para>
  1005. If the conditional statement causes the line length to exceed the
  1006. <link linkend="coding-standard.php-file-formatting.max-line-length">maximum line
  1007. length</link>
  1008. and has several clauses, you may break the conditional into
  1009. multiple lines. In
  1010. such a case, break the line prior to a logic operator, and
  1011. pad the line such that
  1012. it aligns under the first character of the conditional
  1013. clause. The closing paren
  1014. in the conditional will then be placed on a line with
  1015. the opening brace, with one
  1016. space separating the two, at an indentation level
  1017. equivalent to the opening
  1018. control statement.
  1019. </para>
  1020. <programlisting language="php"><![CDATA[
  1021. if (($a == $b)
  1022. && ($b == $c)
  1023. || (Foo::CONST == $d)
  1024. ) {
  1025. $a = $d;
  1026. }
  1027. ]]></programlisting>
  1028. <para>
  1029. The intention of this latter declaration format is to prevent issues when
  1030. adding or removing clauses from the conditional during later revisions.
  1031. </para>
  1032. <para>
  1033. Para las declaraciones "if" que incluyan "elseif" o "else",
  1034. las convenciones de
  1035. formato son similares a la construcción
  1036. "if". Los ejemplos siguientes demuestran
  1037. el formato correcto
  1038. para declaraciones "if" con construcciones "else" y/o
  1039. "elseif":
  1040. </para>
  1041. <programlisting language="php"><![CDATA[
  1042. if ($a != 2) {
  1043. $a = 2;
  1044. } else {
  1045. $a = 7;
  1046. }
  1047. if ($a != 2) {
  1048. $a = 2;
  1049. } elseif ($a == 3) {
  1050. $a = 4;
  1051. } else {
  1052. $a = 7;
  1053. }
  1054. if (($a == $b)
  1055. && ($b == $c)
  1056. || (Foo::CONST == $d)
  1057. ) {
  1058. $a = $d;
  1059. } elseif (($a != $b)
  1060. || ($b != $c)
  1061. ) {
  1062. $a = $c;
  1063. } else {
  1064. $a = $b;
  1065. }
  1066. ]]></programlisting>
  1067. <para>
  1068. <acronym>PHP</acronym>
  1069. permite escribir sentencias sin llaves -{}- en algunas
  1070. circunstancias.
  1071. Este
  1072. estándar de código no hace ninguna diferenciación-
  1073. toda sentencia "if", "elseif"
  1074. o "else" debe usar llaves.
  1075. </para>
  1076. <para>
  1077. El uso de la construcción "elseif" está permitido pero no
  1078. se aconseja, en favor
  1079. de la combinación "else if".
  1080. </para>
  1081. </sect3>
  1082. <sect3 id="coding-standards.coding-style.control-statements.switch">
  1083. <title>Switch</title>
  1084. <para>
  1085. Las declaraciones de control escritas con la declaración
  1086. "switch" deben tener
  1087. un único espacio en blanco antes del
  1088. paréntesis de apertura del condicional y
  1089. después del
  1090. paréntesis de cierre.
  1091. </para>
  1092. <para>
  1093. Todo contenido dentro de una declaración "switch" debe
  1094. separarse usando cuatro
  1095. espacios. El contenido dentro de
  1096. cada declaración "case" debe separarse usando
  1097. cuatro
  1098. espacios adicionales.
  1099. </para>
  1100. <programlisting language="php"><![CDATA[
  1101. switch ($numPeople) {
  1102. case 1:
  1103. break;
  1104. case 2:
  1105. break;
  1106. default:
  1107. break;
  1108. }
  1109. ]]>
  1110. </programlisting>
  1111. <para>
  1112. La construcción
  1113. <property>default</property>
  1114. no debe omitirse nunca
  1115. en una declaración
  1116. <property>switch</property>
  1117. .
  1118. </para>
  1119. <note>
  1120. <para>
  1121. <emphasis>NOTA:</emphasis>
  1122. En ocasiones, resulta útil
  1123. escribir una declaración
  1124. <property>case</property>
  1125. que salta al
  1126. siguiente case al no incluir un
  1127. <property>break</property>
  1128. o
  1129. <property>return</property>
  1130. dentro de ese case. Para distinguir
  1131. estos casos de posibles errores, cualquier declaración
  1132. donde
  1133. <property>break</property>
  1134. o
  1135. <property>return</property>
  1136. sean
  1137. omitidos deberán contener un comentario indicando que se
  1138. omitieron intencionadamente.
  1139. </para>
  1140. </note>
  1141. </sect3>
  1142. </sect2>
  1143. <sect2 id="coding-standards.inline-documentation">
  1144. <title>Documentación integrada</title>
  1145. <sect3 id="coding-standards.inline-documentation.documentation-format">
  1146. <title>Formato de documentación</title>
  1147. <para>
  1148. Todos los bloques de documentación ("docblocks") deben ser
  1149. compatibles con el
  1150. formato de phpDocumentor.
  1151. Describir el formato de phpDocumentor está fuera del
  1152. alcance de este documento.
  1153. Para más información, visite:
  1154. <ulink url="http://phpdoc.org/">http://phpdoc.org/</ulink>
  1155. </para>
  1156. <para>
  1157. Todos los archivos de clase deben contener un bloque de
  1158. documentación "a nivel
  1159. de archivo" al principio de cada
  1160. archivo y un bloque de documentación "a nivel de
  1161. clase"
  1162. inmediatamente antes de cada clase. Ejemplo de estos
  1163. bloques de
  1164. documentación pueden encontrarse debajo.
  1165. </para>
  1166. </sect3>
  1167. <sect3 id="coding-standards.inline-documentation.files">
  1168. <title>Archivos</title>
  1169. <para>
  1170. Cada archivo que contenga código
  1171. <acronym>PHP</acronym>
  1172. debe tener un bloque
  1173. de documentación al principio del archivo que contenga como
  1174. mínimo las siguientes etiquetas phpDocumentor:
  1175. </para>
  1176. <programlisting language="php"><![CDATA[
  1177. /**
  1178. * Descripción corta del fichero
  1179. *
  1180. * Descripción larga del fichero (si la hubiera)...
  1181. *
  1182. * LICENSE: Some license information
  1183. *
  1184. * @category Zend
  1185. * @package Zend_Magic
  1186. * @subpackage Wand
  1187. * @copyright 2008 Zend Technologies
  1188. * @license http://framework.zend.com/license BSD License
  1189. * @version $Id:$
  1190. * @link http://framework.zend.com/package/PackageName
  1191. * @since File available since Release 1.5.0
  1192. */
  1193. ]]></programlisting>
  1194. <para>
  1195. The
  1196. <property>@category</property>
  1197. annotation must have a value of "Zend".
  1198. </para>
  1199. <para>
  1200. The
  1201. <property>@package</property>
  1202. annotation must be assigned, and should be
  1203. equivalent to the component name of
  1204. the class contained in the file; typically,
  1205. this will only have two segments, the
  1206. "Zend" prefix, and the component name.
  1207. </para>
  1208. <para>
  1209. The
  1210. <property>@subpackage</property>
  1211. annotation is optional. If provided, it
  1212. should be the subcomponent name, minus
  1213. the class prefix. In the example above,
  1214. the assumption is that the class in the
  1215. file is either "
  1216. <classname>Zend_Magic_Wand</classname>
  1217. ", or
  1218. uses that classname as part of its prefix.
  1219. </para>
  1220. </sect3>
  1221. <sect3 id="coding-standards.inline-documentation.classes">
  1222. <title>Clases</title>
  1223. <para>
  1224. Cada clase debe contener un bloque de documentación que
  1225. contenga como mínimo
  1226. las siguientes etiquetas phpDocumentor:
  1227. </para>
  1228. <programlisting language="php"><![CDATA[
  1229. /**
  1230. * Descripción corta de la clase
  1231. *
  1232. * Descripcion larga de la clase (si la hubiera)...
  1233. *
  1234. * @category Zend
  1235. * @package Zend_Magic
  1236. * @subpackage Wand
  1237. * @copyright 2008 Zend Technologies
  1238. * @license http://framework.zend.com/license BSD License
  1239. * @version Release: @package_version@
  1240. * @link http://framework.zend.com/package/PackageName
  1241. * @since Class available since Release 1.5.0
  1242. * @deprecated Class deprecated in Release 2.0.0
  1243. */
  1244. ]]></programlisting>
  1245. <para>
  1246. The
  1247. <property>@category</property>
  1248. annotation must have a value of "Zend".
  1249. </para>
  1250. <para>
  1251. The
  1252. <property>@package</property>
  1253. annotation must be assigned, and should be
  1254. equivalent to the component to which
  1255. the class belongs; typically, this will
  1256. only have two segments, the "Zend"
  1257. prefix, and the component name.
  1258. </para>
  1259. <para>
  1260. The
  1261. <property>@subpackage</property>
  1262. annotation is optional. If provided, it
  1263. should be the subcomponent name, minus
  1264. the class prefix. In the example above,
  1265. the assumption is that the class
  1266. described is either "
  1267. <classname>Zend_Magic_Wand</classname>
  1268. ", or uses
  1269. that classname as part of its prefix.
  1270. </para>
  1271. </sect3>
  1272. <sect3 id="coding-standards.inline-documentation.functions">
  1273. <title>Funciones</title>
  1274. <para>
  1275. Cada función, incluyendo métodos de objeto, debe contener un
  1276. bloque de documentación que contenga como mínimo:
  1277. </para>
  1278. <itemizedlist>
  1279. <listitem>
  1280. <para>Una descripción de la función</para>
  1281. </listitem>
  1282. <listitem>
  1283. <para>Todos los argumentos</para>
  1284. </listitem>
  1285. <listitem>
  1286. <para>Todos los posibles valores de retorno</para>
  1287. </listitem>
  1288. </itemizedlist>
  1289. <para>
  1290. No es necesario incluir la etiqueta "@access" si el nivel
  1291. de acceso es conocido
  1292. de antemano por el modificador
  1293. "public", "private", o "protected" usado para
  1294. declarar la
  1295. función.
  1296. </para>
  1297. <para>
  1298. Si una función/método puede lanzar una excepción,
  1299. utilice @throws para todos
  1300. los tipos de excepciones
  1301. conocidas:
  1302. </para>
  1303. <programlisting language="php"><![CDATA[
  1304. @throws exceptionclass [description]
  1305. ]]></programlisting>
  1306. </sect3>
  1307. </sect2>
  1308. </sect1>
  1309. </appendix>
  1310. <!--
  1311. vim:se ts=4 sw=4 et:
  1312. -->