coding_standard.xml 47 KB

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