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ñoo.
  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 consonancia 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 nombrado</title>
  115. <sect2 id="coding-standard.naming-conventions.classes">
  116. <title>Clases</title>
  117. <para>
  118. Zend Framework se estandariza en una convencion de nombrado 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 librería 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 Zend Framework están almacenadas
  125. jerárquicamente bajo estas carpetas raíz.
  126. </para>
  127. <para>
  128. Los nombres de clase 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>Abstract Classes</title>
  165. <para>
  166. In general, abstract classes follow the same conventions as <link
  167. linkend="coding-standard.naming-conventions.classes">classes</link>,
  168. with one additional rule: abstract class names must end in the term, "Abstract",
  169. and that term must not be preceded by an underscore. As an example,
  170. <classname>Zend_Controller_Plugin_Abstract</classname> is considered an
  171. invalid name, but <classname>Zend_Controller_PluginAbstract</classname> or
  172. <classname>Zend_Controller_Plugin_PluginAbstract</classname> would be valid
  173. names.
  174. </para>
  175. <note>
  176. <para>
  177. This naming convention is new with version 1.9.0 of Zend Framework. Classes
  178. that pre-date that version may not follow this rule, but will be renamed in
  179. the future in order to comply.
  180. </para>
  181. </note>
  182. </sect2>
  183. <sect2 id="coding-standard.naming-conventions.interfaces">
  184. <title>Interfaces</title>
  185. <para>
  186. In general, interfaces follow the same conventions as <link
  187. linkend="coding-standard.naming-conventions.classes">classes</link>,
  188. with one additional rule: interface names may optionally end in the term,
  189. "Interface", but that term must not be preceded by an underscore. As an example,
  190. <classname>Zend_Controller_Plugin_Interface</classname> is considered an
  191. invalid name, but <classname>Zend_Controller_PluginInterface</classname> or
  192. <classname>Zend_Controller_Plugin_PluginInterface</classname> would be valid
  193. names.
  194. </para>
  195. <para>
  196. While this rule is not required, it is strongly recommended, as it provides a
  197. good visual cue to developers as to which files contain interfaces rather than
  198. classes.
  199. </para>
  200. <note>
  201. <para>
  202. This naming convention is new with version 1.9.0 of Zend Framework. Classes
  203. that pre-date that version may not follow this rule, but will be renamed in
  204. the future in order to comply.
  205. </para>
  206. </note>
  207. </sect2>
  208. <sect2 id="coding-standard.naming-conventions.filenames">
  209. <title>Nombres de archivo</title>
  210. <para>
  211. Para cualquier otro archivo, sólo caracteres alfanuméricos,
  212. barras bajas (_) y guiones (-) están permitidos.
  213. Los espacios en blanco están estrictamente prohibidos.
  214. </para>
  215. <para>
  216. Cualquier archivo que contenga código <acronym>PHP</acronym> debe terminar con la
  217. extensión "<filename>.php</filename>", con la excepción de los scripts de vista.
  218. Los siguientes ejemplos muestran nombres de archivo admisibles
  219. para clases de Zend Framework..:
  220. </para>
  221. <programlisting language="php"><![CDATA[
  222. Zend/Db.php
  223. Zend/Controller/Front.php
  224. Zend/View/Helper/FormRadio.php
  225. ]]>
  226. </programlisting>
  227. <para>
  228. Los nombres de archivo deben apuntar a nombres de clases como
  229. se describe arriba.
  230. </para>
  231. </sect2>
  232. <sect2 id="coding-standard.naming-conventions.functions-and-methods">
  233. <title>Funciones y Métodos</title>
  234. <para>
  235. Los nombres de funciones pueden contener únicamente caracteres
  236. alfanuméricos. Las guiones bajos (_) no estan permitidos.
  237. Los números están permitidos en los nombres de función pero no
  238. se aconseja en la mayoría de los casos.
  239. </para>
  240. <para>
  241. Los nombres de funciones deben empezar siempre con una letra
  242. minúscula. Cuando un nombre de función consiste en más de una
  243. palabra, la primera letra de cada nueva palabra debe estar en
  244. mayúsculas. Esto es llamado comúnmente como formato "camelCase".
  245. </para>
  246. <para>
  247. Por norma general, se recomienda la elocuencia. Los nombres de
  248. función deben ser lo suficientemente elocuentes como para
  249. describir su propósito y comportamiento.
  250. </para>
  251. <para>
  252. Estos son ejemplos de nombres de funciones admisibles:
  253. </para>
  254. <programlisting language="php"><![CDATA[
  255. filterInput()
  256. getElementById()
  257. widgetFactory()
  258. ]]>
  259. </programlisting>
  260. <para>
  261. Para programación orientada a objetos, los accesores para
  262. instancia o variables estáticas deben ir antepuestos con un
  263. "get" o un "set". Al implementar patrones de diseño,
  264. tales como el patrón singleton o el patrón factory, el nombre
  265. del método debe contener en la práctica el nombre del patrón
  266. para describir su comportamiento de forma más completa.
  267. </para>
  268. <para>
  269. Para métodos en objetos que son declarados con el modificador
  270. "private" o "protected", el primer carácter del nombre de la
  271. variable debe ser una barra baja (_). Este es el único uso
  272. admisible de una barra baja en un nombre de método.
  273. Los métodos declarados como públicos no deberían contener nunca
  274. una barra baja.
  275. </para>
  276. <para>
  277. Las funciones de alcance global (también llamadas "funciones
  278. flotantes") están permitidas pero desaconsejadas en la mayoría
  279. de los casos.
  280. Considere envolver esas funciones en una clase estática.
  281. </para>
  282. </sect2>
  283. <sect2 id="coding-standard.naming-conventions.variables">
  284. <title>Variables</title>
  285. <para>
  286. Los nombres de variables pueden contener caracteres
  287. alfanuméricos. Las barras bajas (_) no están permitidas.
  288. Los números están permitidos en los nombres de variable pero no
  289. se aconseja en la mayoría de los casos.
  290. </para>
  291. <para>
  292. Para las variables de instancia que son declaradas con el
  293. modificador "private" o "protected", el primer carácter de la
  294. variable debe ser una única barra baja (_).
  295. Este es el único caso admisible de una barra baja en el nombre
  296. de una variable. Las variables declaradas como "public" no
  297. pueden empezar nunca por barra baja.
  298. </para>
  299. <para>
  300. Al igual que los nombres de funciones (ver sección 3.3),
  301. los nombres de variables deben empezar siempre con una letra en
  302. minúscula y seguir la convención "camelCaps".
  303. </para>
  304. <para>
  305. Por norma general, se recomienda la elocuencia. Las variables
  306. deberían ser siempre tan elocuentes como prácticas para
  307. describir los datos que el desarrollador pretende almacenar en
  308. ellas. Variables escuetas como "$i" y "$n" están desaconsejadas,
  309. salvo para el contexto de los bucles más pequeños.
  310. Si un bucle contiene más de 20 líneas de código, las variables
  311. de índice deberían tener nombres más descriptivos.
  312. </para>
  313. </sect2>
  314. <sect2 id="coding-standard.naming-conventions.constants">
  315. <title>Constantes</title>
  316. <para>
  317. Las constantes pueden contener tanto caracteres alfanuméricos
  318. como barras bajas (_). Los números están permitidos.
  319. </para>
  320. <para>
  321. Todos las letras pertenecientes al nombre de una constante
  322. deben aparecer en mayúsculas.
  323. </para>
  324. <para>
  325. Las palabras dentro del nombre de una constante deben separarse
  326. por barras bajas (_). Por ejemplo,
  327. <constant>EMBED_SUPPRESS_EMBED_EXCEPTION</constant> está permitido, pero
  328. <constant>EMBED_SUPPRESSEMBEDEXCEPTION</constant> no.
  329. </para>
  330. <para>
  331. Las constantes deben ser definidas como miembros de clase con
  332. el modificador "const". Definir constantes en el alcance global
  333. con la función "define" está permitido pero no recomendado.
  334. </para>
  335. </sect2>
  336. </sect1>
  337. <sect1 id="coding-standard.coding-style">
  338. <title>Estilo de código</title>
  339. <sect2 id="coding-standard.coding-style.php-code-demarcation">
  340. <title>Demarcación de código PHP</title>
  341. <para>
  342. El código <acronym>PHP</acronym> debe estar delimitado siempre por la forma
  343. completa de las etiquetas <acronym>PHP</acronym> estándar:
  344. </para>
  345. <programlisting language="php"><![CDATA[
  346. <?php
  347. ?>
  348. ]]>
  349. </programlisting>
  350. <para>
  351. Las etiquetas cortas (short tags) no se permiten nunca.
  352. Para archivos que contengan únicamente código PHP, la etiqueta
  353. de cierrre debe omitirse siempre
  354. (Ver <xref linkend="coding-standard.php-file-formatting.general" />).
  355. </para>
  356. </sect2>
  357. <sect2 id="coding-standard.coding-style.strings">
  358. <title>Cadenas</title>
  359. <sect3 id="coding-standard.coding-style.strings.literals">
  360. <title>Literales cadena</title>
  361. <para>
  362. Cuando una cadena es literal (no contiene sustitución de
  363. variables), el apóstrofo o "comilla" debería ser usado
  364. siempre para delimitar la cadena:
  365. </para>
  366. <programlisting language="php"><![CDATA[
  367. $a = 'Example String';
  368. ]]></programlisting>
  369. </sect3>
  370. <sect3 id="coding-standard.coding-style.strings.literals-containing-apostrophes">
  371. <title>Literales Cadena que Contengan Apóstrofos</title>
  372. <para>
  373. Cuando el propio literal cadena contega apóstrofos,
  374. es permitido delimitar la cadena con "dobles comillas".
  375. Esto es especialmente útil para sentencias <constant>SQL</constant>:
  376. </para>
  377. <programlisting language="php"><![CDATA[
  378. $sql = "SELECT `id`, `name` from `people` WHERE `name`='Fred' OR `name`='Susan'";
  379. ]]></programlisting>
  380. <para>
  381. Esta sintáxis es preferible a escapar apóstrofes,
  382. ya que es mucho más fácil de leer.
  383. </para>
  384. </sect3>
  385. <sect3 id="coding-standard.coding-style.strings.variable-substitution">
  386. <title>Sustitución de Variables</title>
  387. <para>
  388. La sustitución de variables está permitida en cualquiera
  389. de estas formas:
  390. </para>
  391. <programlisting language="php"><![CDATA[
  392. $greeting = "Hello $name, welcome back!";
  393. $greeting = "Hello {$name}, welcome back!";
  394. ]]></programlisting>
  395. <para>
  396. Por consistencia, esta forma no está permitida:
  397. <programlisting language="php"><![CDATA[
  398. $greeting = "Hello ${name}, welcome back!";
  399. ]]></programlisting>
  400. </para>
  401. </sect3>
  402. <sect3 id="coding-standard.coding-style.strings.string-concatenation">
  403. <title>Concatenación de cadenas</title>
  404. <para>
  405. Las cadenas deben ser concatenadas usando el operador
  406. punto ("."). Un espacio debe añadirse siempre antes y
  407. después del operador "." para mejorar la legibilidad:
  408. </para>
  409. <programlisting language="php"><![CDATA[
  410. $company = 'Zend' . ' ' . 'Technologies';
  411. ]]></programlisting>
  412. <para>
  413. Al concatenar cadenas con el operador ".", se recomienda
  414. partir la sentencia en múltiples líneas para mejorar la
  415. legibilidad. En estos casos, cada linea sucesiva debe
  416. llevar un margen de espacios en blanco de forma que el
  417. operador "." está alineado bajo el operador "=":
  418. </para>
  419. <programlisting language="php"><![CDATA[
  420. $sql = "SELECT `id`, `name` FROM `people` "
  421. . "WHERE `name` = 'Susan' "
  422. . "ORDER BY `name` ASC ";
  423. ]]></programlisting>
  424. </sect3>
  425. </sect2>
  426. <sect2 id="coding-standard.coding-style.arrays">
  427. <title>Arrays</title>
  428. <sect3 id="coding-standard.coding-style.arrays.numerically-indexed">
  429. <title>Arrays Indexados Numéricamente</title>
  430. <para>No están permitidos números negativos como índices.</para>
  431. <para>
  432. Un array indexado puede empezar por cualquier valor no
  433. negativo, sin embargo, no se recomiendan índices base
  434. distintos a 0.
  435. </para>
  436. <para>
  437. Al declarar arrays indexados con la función
  438. <methodname>array</methodname>, un espacio de separación deben
  439. añadirse después de cada delimitador coma para mejorar la
  440. legibilidad:
  441. </para>
  442. <programlisting language="php"><![CDATA[
  443. $sampleArray = array(1, 2, 3, 'Zend', 'Studio');
  444. ]]></programlisting>
  445. <para>
  446. Se permite declarar arrays indexados multilínea usando la
  447. construcción "array".
  448. En este caso, cada línea sucesiva debe ser tabulada con
  449. cuatro espacios de forma que el principio de cada línea
  450. está alineado:
  451. </para>
  452. <programlisting language="php"><![CDATA[
  453. $sampleArray = array(1, 2, 3, 'Zend', 'Studio',
  454. $a, $b, $c,
  455. 56.44, $d, 500);
  456. ]]></programlisting>
  457. <para>
  458. Alternately, the initial array item may begin on the following line. If so,
  459. it should be padded at one indentation level greater than the line containing
  460. the array declaration, and all successive lines should have the same
  461. indentation; the closing paren should be on a line by itself at the same
  462. indentation level as the line containing the array declaration:
  463. </para>
  464. <programlisting language="php"><![CDATA[
  465. $sampleArray = array(
  466. 1, 2, 3, 'Zend', 'Studio',
  467. $a, $b, $c,
  468. 56.44, $d, 500,
  469. );
  470. ]]></programlisting>
  471. <para>
  472. When using this latter declaration, we encourage using a trailing comma for
  473. the last item in the array; this minimizes the impact of adding new items on
  474. successive lines, and helps to ensure no parse errors occur due to a missing
  475. comma.
  476. </para>
  477. </sect3>
  478. <sect3 id="coding-standard.coding-style.arrays.associative">
  479. <title>Arrays Asociativos</title>
  480. <para>
  481. Al declarar arrays asociativos con la construcción
  482. <methodname>array</methodname>, se recomienda partir la declaración
  483. en múltiples líneas. En este caso, cada línea sucesiva debe
  484. ser tabulada con cuatro espacios de forma que tanto las
  485. llaves como los valores están alineados:
  486. </para>
  487. <programlisting language="php"><![CDATA[
  488. $sampleArray = array('firstKey' => 'firstValue',
  489. 'secondKey' => 'secondValue');
  490. ]]></programlisting>
  491. <para>
  492. Alternately, the initial array item may begin on the following line. If so,
  493. it should be padded at one indentation level greater than the line containing
  494. the array declaration, and all successive lines should have the same
  495. indentation; the closing paren should be on a line by itself at the same
  496. indentation level as the line containing the array declaration. For
  497. readability, the various "=>" assignment operators should be padded such that
  498. they align.
  499. </para>
  500. <programlisting language="php"><![CDATA[
  501. $sampleArray = array(
  502. 'firstKey' => 'firstValue',
  503. 'secondKey' => 'secondValue',
  504. );
  505. ]]></programlisting>
  506. <para>
  507. When using this latter declaration, we encourage using a trailing comma for
  508. the last item in the array; this minimizes the impact of adding new items on
  509. successive lines, and helps to ensure no parse errors occur due to a missing
  510. comma.
  511. </para>
  512. </sect3>
  513. </sect2>
  514. <sect2 id="coding-standard.coding-style.classes">
  515. <title>Clases</title>
  516. <sect3 id="coding-standard.coding-style.classes.declaration">
  517. <title>Declaración de clases</title>
  518. <para>
  519. Las Clases deben ser nombradas de acuerdo a las
  520. convenciones de nombrado de Zend Framework.
  521. </para><para>
  522. La llave "{" deberá escribirse siempre en la línea debajo
  523. del nombre de la clase ("one true brace").
  524. </para><para>
  525. Cada clase debe contener un bloque de documentación acorde
  526. con el estándar de PHPDocumentor.
  527. </para><para>
  528. Todo el código contenido en una clase debe ser separado
  529. con cuatro espacios.
  530. </para><para>
  531. Únicamente una clase está permitida en cada archivo <acronym>PHP</acronym>.
  532. </para><para>
  533. Incluir código adicional en archivos de clase está
  534. permitido pero desaconsejado.
  535. En archivos de ese tipo, dos líneas en blanco deben
  536. separar la clase de cualquier código <acronym>PHP</acronym> adicional en el
  537. archivo de clase.
  538. </para>
  539. <para>
  540. A continuación se muestra un ejemplo de una declaración de
  541. clase admisible:
  542. </para>
  543. <programlisting language="php"><![CDATA[
  544. /**
  545. * Bloque de Documentación aquí
  546. */
  547. class SampleClass
  548. {
  549. // el contenido de la clase
  550. // debe separarse con cuatro espacios
  551. }
  552. ]]></programlisting>
  553. <para>
  554. Classes that extend other classes or which implement interfaces should
  555. declare their dependencies on the same line when possible.
  556. </para>
  557. <programlisting language="php"><![CDATA[
  558. class SampleClass extends FooAbstract implements BarInterface
  559. {
  560. }
  561. ]]></programlisting>
  562. <para>
  563. If as a result of such declarations, the line length exceeds the <link
  564. linkend="coding-standard.php-file-formatting.max-line-length">maximum line
  565. length</link>, break the line before the "extends" and/or "implements"
  566. keywords, and pad those lines by one indentation level.
  567. </para>
  568. <programlisting language="php"><![CDATA[
  569. class SampleClass
  570. extends FooAbstract
  571. implements BarInterface
  572. {
  573. }
  574. ]]></programlisting>
  575. <para>
  576. If the class implements multiple interfaces and the declaration exceeds the
  577. maximum line length, break after each comma separating the interfaces, and
  578. indent the interface names such that they align.
  579. </para>
  580. <programlisting language="php"><![CDATA[
  581. class SampleClass
  582. implements BarInterface,
  583. BazInterface
  584. {
  585. }
  586. ]]></programlisting>
  587. </sect3>
  588. <sect3 id="coding-standard.coding-style.classes.member-variables">
  589. <title>Variables de miembros de clase</title>
  590. <para>
  591. Las variables de miembros de clase deben ser nombradas de
  592. acuerdo con las conveciones de nombrado de variables de
  593. Zend Framework.
  594. </para>
  595. <para>
  596. Cualquier variable declarada en una clase debe ser listada
  597. en la parte superior de la clase, por encima de las
  598. declaraciones de cualquier método.
  599. </para>
  600. <para>
  601. La construcción <code>var</code> no está permitido.
  602. Las variables de miembro siempre declaran su visibilidad
  603. usando uno los modificadores <code>private</code>,
  604. <code>protected</code>, o <code>public</code>.
  605. Dar acceso a las variables de miembro declarándolas
  606. directamente como public está permitido pero no se aconseja
  607. en favor de accesor methods (set &amp; get).
  608. </para>
  609. </sect3>
  610. </sect2>
  611. <sect2 id="coding-standard.coding-style.functions-and-methods">
  612. <title>Funciones y Métodos</title>
  613. <sect3 id="coding-standard.coding-style.functions-and-methods.declaration">
  614. <title>Declaración de Funciones y Métodos</title>
  615. <para>
  616. Las Funciones deben ser nombradas de acuerdo a las
  617. convenciones de nombrado de Zend Framework.
  618. </para>
  619. <para>
  620. Los métodos dentro de clases deben declarar siempre su
  621. visibilidad usando un modificador <code>private</code>,
  622. <code>protected</code>, o <code>public</code>.
  623. </para>
  624. <para>
  625. Como en las clases, la llave "{" debe ser escrita en la
  626. línea siguiente al nombre de la función ("one true brace"
  627. form). No está permitido un espacio entre el nombre de la
  628. función y el paróntesis de apertura para los argumentos.
  629. </para>
  630. <para>
  631. Las funciones de alcance global no están permitidas.
  632. </para>
  633. <para>
  634. Lo siguiente es un ejemplo de una declaración admisible de
  635. una función en una clase:
  636. <programlisting language="php"><![CDATA[
  637. /**
  638. * Bloque de Documentación aquí
  639. */
  640. class Foo
  641. {
  642. /**
  643. * Bloque de Documentación aquí
  644. */
  645. public function bar()
  646. {
  647. // el contenido de la función
  648. // debe separarse con cuatro espacios
  649. }
  650. }
  651. ]]></programlisting>
  652. </para>
  653. <para>
  654. In cases where the argument list exceeds the <link
  655. linkend="coding-standard.php-file-formatting.max-line-length">maximum line
  656. length</link>, you may introduce line breaks. Additional arguments to the
  657. function or method must be indented one additional level beyond the function
  658. or method declaration. A line break should then occur before the closing
  659. argument paren, which should then be placed on the same line as the opening
  660. brace of the function or method with one space separating the two, and at the
  661. same indentation level as the function or method declaration. The following is
  662. an example of one such situation:
  663. <programlisting language="php"><![CDATA[
  664. /**
  665. * Documentation Block Here
  666. */
  667. class Foo
  668. {
  669. /**
  670. * Documentation Block Here
  671. */
  672. public function bar($arg1, $arg2, $arg3,
  673. $arg4, $arg5, $arg6
  674. ) {
  675. // all contents of function
  676. // must be indented four spaces
  677. }
  678. }
  679. ]]></programlisting>
  680. </para>
  681. <note>
  682. <para>
  683. <emphasis>NOTA:</emphasis>
  684. El paso por referencia es el único mecanismo de paso de
  685. parámetros permitido en una declaración de método.
  686. </para>
  687. </note>
  688. <programlisting language="php"><![CDATA[
  689. /**
  690. * Bloque de Documentación aquí
  691. */
  692. class Foo
  693. {
  694. /**
  695. * Bloque de Documentación aquí
  696. */
  697. public function bar(&$baz)
  698. {}
  699. }
  700. ]]></programlisting>
  701. <para>
  702. La llamada por referencia está estrictamente prohibida.
  703. </para>
  704. <para>
  705. El valor de retorno no debe estar indicado entre
  706. paréntesis. Esto podría afectar a la legibilidad, además de
  707. romper el código si un método se modifica posteriormente
  708. para que devuelva por referencia.
  709. </para>
  710. <programlisting language="php"><![CDATA[
  711. /**
  712. * Bloque de Documentación aquí
  713. */
  714. class Foo
  715. {
  716. /**
  717. * INCORRECTO
  718. */
  719. public function bar()
  720. {
  721. return($this->bar);
  722. }
  723. /**
  724. * CORRECTO
  725. */
  726. public function bar()
  727. {
  728. return $this->bar;
  729. }
  730. }
  731. ]]></programlisting>
  732. </sect3>
  733. <sect3 id="coding-standard.coding-style.functions-and-methods.usage">
  734. <title>Uso de Funciones y Métodos</title>
  735. <para>
  736. Los argumentos de la función tendrían que estar separados
  737. por un único espacio posterior después del delimitador coma.
  738. A continuación se muestra un ejemplo de una invocación
  739. admisible de una función que recibe tres argumentos:
  740. </para>
  741. <programlisting language="php"><![CDATA[
  742. threeArguments(1, 2, 3);
  743. ]]></programlisting>
  744. <para>
  745. La llamada por referencia está estrictamente prohibida.
  746. Vea la sección de declaraciones de funciones para el método
  747. correcto de pasar argumentos por referencia.
  748. </para>
  749. <para>
  750. Al pasar arrays como argumentos a una función, la llamada
  751. a la función puede incluir el indicador "hint" y puede
  752. separarse en múltiples líneas para aumentar la legibilidad.
  753. En esos casos, se aplican las pautas normales para escribir
  754. arrays:
  755. </para>
  756. <programlisting language="php"><![CDATA[
  757. threeArguments(array(1, 2, 3), 2, 3);
  758. threeArguments(array(1, 2, 3, 'Zend', 'Studio',
  759. $a, $b, $c,
  760. 56.44, $d, 500), 2, 3);
  761. threeArguments(array(
  762. 1, 2, 3, 'Zend', 'Studio',
  763. $a, $b, $c,
  764. 56.44, $d, 500
  765. ), 2, 3);
  766. ]]></programlisting>
  767. </sect3>
  768. </sect2>
  769. <sect2 id="coding-standard.coding-style.control-statements">
  770. <title>Sentencias de Control</title>
  771. <sect3 id="coding-standard.coding-style.control-statements.if-else-elseif">
  772. <title>If/Else/Elseif</title>
  773. <para>
  774. Las sentencias de control basadas en las construcciones
  775. <methodname>if</methodname> y <methodname>elseif</methodname> deben tener un solo
  776. espacio en blanco antes del paréntesis de apertura del
  777. condicional y un solo espacio en blanco después del
  778. paréntesis de cierre.
  779. </para>
  780. <para>
  781. Dentro de las sentencias condicionales entre paréntesis,
  782. los operadores deben separarse con espacios, por legibilidad.
  783. Se aconseja el uso de paréntesis internos para mejorar la
  784. agrupación lógica en expresiones condicionales más largas.
  785. </para>
  786. <para>
  787. La llave de apertura "{" se escribe en la misma línea que
  788. la sentencia condicional. La llave de cierre "}" se escribe
  789. siempre en su propia línea. Cualquier contenido dentro de
  790. las llaves debe separarse con cuatro espacios en blanco.
  791. </para>
  792. <programlisting language="php"><![CDATA[
  793. if ($a != 2) {
  794. $a = 2;
  795. }
  796. ]]></programlisting>
  797. <para>
  798. If the conditional statement causes the line length to exceed the <link
  799. linkend="coding-standard.php-file-formatting.max-line-length">maximum line
  800. length</link> and has several clauses, you may break the conditional into
  801. multiple lines. In such a case, break the line prior to a logic operator, and
  802. pad the line such that it aligns under the first character of the conditional
  803. clause. The closing paren in the conditional will then be placed on a line with
  804. the opening brace, with one space separating the two, at an indentation level
  805. equivalent to the opening control statement.
  806. </para>
  807. <programlisting language="php"><![CDATA[
  808. if (($a == $b)
  809. && ($b == $c)
  810. || (Foo::CONST == $d)
  811. ) {
  812. $a = $d;
  813. }
  814. ]]></programlisting>
  815. <para>
  816. The intention of this latter declaration format is to prevent issues when
  817. adding or removing clauses from the conditional during later revisions.
  818. </para>
  819. <para>
  820. Para las declaraciones "if" que incluyan "elseif" o "else",
  821. las convenciones de formato son similares a la construcción
  822. "if". Los ejemplos siguientes demuestran el formato correcto
  823. para declaraciones "if" con construcciones "else" y/o
  824. "elseif":
  825. </para>
  826. <programlisting language="php"><![CDATA[
  827. if ($a != 2) {
  828. $a = 2;
  829. } else {
  830. $a = 7;
  831. }
  832. if ($a != 2) {
  833. $a = 2;
  834. } elseif ($a == 3) {
  835. $a = 4;
  836. } else {
  837. $a = 7;
  838. }
  839. if (($a == $b)
  840. && ($b == $c)
  841. || (Foo::CONST == $d)
  842. ) {
  843. $a = $d;
  844. } elseif (($a != $b)
  845. || ($b != $c)
  846. ) {
  847. $a = $c;
  848. } else {
  849. $a = $b;
  850. }
  851. ]]></programlisting>
  852. <para>
  853. <acronym>PHP</acronym> permite escribir sentencias sin llaves -{}- en algunas
  854. circunstancias.
  855. Este estándar de código no hace ninguna diferenciación-
  856. toda sentencia "if", "elseif" o "else" debe usar llaves.
  857. </para>
  858. <para>
  859. El uso de la construcción "elseif" está permitido pero no
  860. se aconseja, en favor de la combinación "else if".
  861. </para>
  862. </sect3>
  863. <sect3 id="coding-standards.coding-style.control-statements.switch">
  864. <title>Switch</title>
  865. <para>
  866. Las declaraciones de control escritas con la declaración
  867. "switch" deben tener un único espacio en blanco antes del
  868. paréntesis de apertura del condicional y después del
  869. paréntesis de cierre.
  870. </para>
  871. <para>
  872. Todo contenido dentro de una declaración "switch" debe
  873. separarse usando cuatro espacios. El contenido dentro de
  874. cada declaración "case" debe separarse usando cuatro
  875. espacios adicionales.
  876. </para>
  877. <programlisting language="php"><![CDATA[
  878. switch ($numPeople) {
  879. case 1:
  880. break;
  881. case 2:
  882. break;
  883. default:
  884. break;
  885. }
  886. ]]>
  887. </programlisting>
  888. <para>
  889. La construcción <methodname>default</methodname> no debe omitirse nunca
  890. en una declaración <methodname>switch</methodname>.
  891. </para>
  892. <note>
  893. <para>
  894. <emphasis>NOTA:</emphasis> En ocasiones, resulta útil
  895. escribir una declaración <methodname>case</methodname> que salta al
  896. siguiente case al no incluir un <methodname>break</methodname> o
  897. <methodname>return</methodname> dentro de ese case. Para distinguir
  898. estos casos de posibles errores, cualquier declaración
  899. donde <methodname>break</methodname> o <methodname>return</methodname> sean
  900. omitidos deberán contener un comentario indicando que se
  901. omitieron intencionadamente.
  902. </para>
  903. </note>
  904. </sect3>
  905. </sect2>
  906. <sect2 id="coding-standards.inline-documentation">
  907. <title>Documentación integrada</title>
  908. <sect3 id="coding-standards.inline-documentation.documentation-format">
  909. <title>Formato de documentación</title>
  910. <para>
  911. Todos los bloques de documentación ("docblocks") deben ser
  912. compatibles con el formato de phpDocumentor.
  913. Describir el formato de phpDocumentor está fuera del
  914. alcance de este documento.
  915. Para más información, visite:
  916. <ulink url="http://phpdoc.org/">http://phpdoc.org/</ulink>
  917. </para>
  918. <para>
  919. Todos los archivos de clase deben contener un bloque de
  920. documentación "a nivel de archivo" al principio de cada
  921. archivo y un bloque de documentación "a nivel de clase"
  922. inmediatamente antes de cada clase. Ejemplo de estos
  923. bloques de documentación pueden encontrarse debajo.
  924. </para>
  925. </sect3>
  926. <sect3 id="coding-standards.inline-documentation.files">
  927. <title>Archivos</title>
  928. <para>
  929. Cada archivo que contenga código <acronym>PHP</acronym> debe tener un bloque
  930. de documentación al principio del archivo que contenga como
  931. mínimo las siguientes etiquetas phpDocumentor:
  932. </para>
  933. <programlisting language="php"><![CDATA[
  934. /**
  935. * Descripción corta del fichero
  936. *
  937. * Descripción larga del fichero (si la hubiera)...
  938. *
  939. * LICENSE: Some license information
  940. *
  941. * @category Zend
  942. * @package Zend_Magic
  943. * @subpackage Wand
  944. * @copyright 2008 Zend Technologies
  945. * @license http://framework.zend.com/license BSD License
  946. * @version $Id:$
  947. * @link http://framework.zend.com/package/PackageName
  948. * @since File available since Release 1.5.0
  949. */
  950. ]]></programlisting>
  951. <para>
  952. The <property>@category</property> annotation must have a value of "Zend".
  953. </para>
  954. <para>
  955. The <property>@package</property> annotation must be assigned, and should be
  956. equivalent to the component name of the class contained in the file; typically,
  957. this will only have two segments, the "Zend" prefix, and the component name.
  958. </para>
  959. <para>
  960. The <property>@subpackage</property> annotation is optional. If provided, it
  961. should be the subcomponent name, minus the class prefix. In the example above,
  962. the assumption is that the class in the file is either "Zend_Magic_Wand", or
  963. uses that classname as part of its prefix.
  964. </para>
  965. </sect3>
  966. <sect3 id="coding-standards.inline-documentation.classes">
  967. <title>Clases</title>
  968. <para>
  969. Cada clase debe contener un bloque de documentación que
  970. contenga como mínimo las siguientes etiquetas phpDocumentor:
  971. </para>
  972. <programlisting language="php"><![CDATA[
  973. /**
  974. * Descripción corta de la clase
  975. *
  976. * Descripcion larga de la clase (si la hubiera)...
  977. *
  978. * @category Zend
  979. * @package Zend_Magic
  980. * @subpackage Wand
  981. * @copyright 2008 Zend Technologies
  982. * @license http://framework.zend.com/license BSD License
  983. * @version Release: @package_version@
  984. * @link http://framework.zend.com/package/PackageName
  985. * @since Class available since Release 1.5.0
  986. * @deprecated Class deprecated in Release 2.0.0
  987. */
  988. ]]></programlisting>
  989. <para>
  990. The <property>@category</property> annotation must have a value of "Zend".
  991. </para>
  992. <para>
  993. The <property>@package</property> annotation must be assigned, and should be
  994. equivalent to the component to which the class belongs; typically, this will
  995. only have two segments, the "Zend" prefix, and the component name.
  996. </para>
  997. <para>
  998. The <property>@subpackage</property> annotation is optional. If provided, it
  999. should be the subcomponent name, minus the class prefix. In the example above,
  1000. the assumption is that the class described is either "Zend_Magic_Wand", or uses
  1001. that classname as part of its prefix.
  1002. </para>
  1003. </sect3>
  1004. <sect3 id="coding-standards.inline-documentation.functions">
  1005. <title>Funciones</title>
  1006. <para>
  1007. Cada función, incluyendo métodos de objeto, debe contener un
  1008. bloque de documentación que contenga como mínimo:
  1009. </para>
  1010. <itemizedlist>
  1011. <listitem><para>Una descripción de la función</para></listitem>
  1012. <listitem><para>Todos los argumentos</para></listitem>
  1013. <listitem><para>Todos los posibles valores de retorno</para></listitem>
  1014. </itemizedlist>
  1015. <para>
  1016. No es necesario incluir la etiqueta "@access" si el nivel
  1017. de acceso es conocido de antemano por el modificador
  1018. "public", "private", o "protected" usado para declarar la
  1019. función.
  1020. </para>
  1021. <para>
  1022. Si una función/método puede lanzar una excepción,
  1023. utilice @throws para todos los tipos de excepciones
  1024. conocidas:
  1025. </para>
  1026. <programlisting language="php"><![CDATA[
  1027. @throws exceptionclass [description]
  1028. ]]></programlisting>
  1029. </sect3>
  1030. </sect2>
  1031. </sect1>
  1032. </appendix>
  1033. <!--
  1034. vim:se ts=4 sw=4 et:
  1035. -->