coding_standard.xml 47 KB

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