2
0

coding_standard.xml 36 KB

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