coding_standard.xml 47 KB

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