Manual de estilo del programador PHP
Transcripción
Manual de estilo del programador PHP
13 de agosto de 2997 Manual de estilo del programador PHP Desarrollo. Área de PHP Índice Control de cambios..................................................................... 3 Introducción y objetivos ............................................................. 4 Indentación .............................................................................. 4 Documentación y comentarios .....................................................5 Estilo y metodología .........................................................................................................5 Cabeceras de ficheros ....................................................................................................... 6 Métodos y funciones..........................................................................................................7 Nombre de los ficheros ...............................................................7 Nomenclatura............................................................................ 8 Espaciado ................................................................................. 9 Asignaciones y operaciones...............................................................................................9 Funciones y métodos ........................................................................................................ 9 Estructuras de control ..................................................................................................... 10 PHP Tags ................................................................................ 10 Codificación y caracteres .......................................................... 11 Buenas prácticas ..................................................................... 11 INFORMACIÓN CONFIDENCIAL No se permite su reproducción, modificación, comunicación o distribución sin autorización del propietario BIKO© Todos los derechos reservados Pol. Industrial Mutilva Baja, Calle E, Nº 5 1ºC, Mutilva Baja Tel. 948 072222 – Fax. 948 072223 – [email protected] - http://www.biko2.com 2 Control de cambios Fecha Autor 13/08/2007 Fran Naranjo Descripción Primera revisión del documento Versión 1.0 INFORMACIÓN CONFIDENCIAL No se permite su reproducción, modificación, comunicación o distribución sin autorización del propietario BIKO© Todos los derechos reservados Pol. Industrial Mutilva Baja, Calle E, Nº 5 1ºC, Mutilva Baja Tel. 948 072222 – Fax. 948 072223 – [email protected] - http://www.biko2.com 3 Introducción y objetivos El presente documento mostrará las pautas que debe seguir todo programador de PHP a la hora de realizar los programas en este lenguaje. De esta forma, se conseguirá un código lo más homogéneo posible que permita un entorno conocido para cualquier desarrollador. Indentación Se usarán tabulaciones (tecla Tab) para cada nivel de indentación del código fuente, no siendo nunca sustituidos por espacios. Se recomienda que cada tabulación ocupe el equivalente a 4 espacios, aunque se deja de mano del programador Se usará siempre una y cuando indentación de la separación código al sea estilo mediante K&R, tabulaciones. Kernigham&Ritchie (http://en.wikipedia.org/wiki/Indent_style) según se indica para las estructuras, obviando la declaración de funciones ya que contienen motivos históricos arraigados desde C. En este estilo, las llaves se colocarán en la misma línea que el elemento al que pertenece y se cierra en la línea siguiente al mismo nivel; su contenido se indenta con un tabulador. Ejemplo: class CMSApplication { function CMSApplication() { $this->_startup_done = false; $this->_shutdown_done = false; } } INFORMACIÓN CONFIDENCIAL No se permite su reproducción, modificación, comunicación o distribución sin autorización del propietario BIKO© Todos los derechos reservados Pol. Industrial Mutilva Baja, Calle E, Nº 5 1ºC, Mutilva Baja Tel. 948 072222 – Fax. 948 072223 – [email protected] - http://www.biko2.com 4 Cada instrucción debe ocupar al menos una línea. No se usará la misma línea para dos instrucciones diferentes. Esta regla viene dada principalmente para estructuras de control como por ejemplo if y que únicamente tiene una instrucción; si bien las llaves son opcionales, la instrucción debe ir en una línea distinta y tabulada. Para el caso de una línea con una única instrucción y que quiera escribirse en más de una línea, las siguientes a la primera se indentarán con un tabulador. Deberá intentar no superarse 80 caracteres por línea. Ejemplo: $options = array( 'cacheDir' => $cache_default_path.'/html/', 'caching' => $cache_enabled, 'lifeTime' => $cache_default_expire_time', 'fileNameProtection' => false, 'hashedDirectoryLevel ' => 0 ); Documentación y comentarios Estilo y metodología La documentación del código se realizará mediante la sintaxis definida por Doxygen (http://www.stack.nl/~dimitri/doxygen/). Doxygen analiza el código fuente en busca de marcas especiales en los comentarios como puede leerse en la documentación, http://www.stack.nl/~dimitri/doxygen/docblocks.html, y usaremos la que añade un asterisco (*) en la primera línea del comentario. INFORMACIÓN CONFIDENCIAL No se permite su reproducción, modificación, comunicación o distribución sin autorización del propietario BIKO© Todos los derechos reservados Pol. Industrial Mutilva Baja, Calle E, Nº 5 1ºC, Mutilva Baja Tel. 948 072222 – Fax. 948 072223 – [email protected] - http://www.biko2.com 5 Por ejemplo: /** * Este es el comentario a usar por Doxygen */ Existen ciertos comandos que pueden usarse para indicar a Doxygen cierta información relevante y que permite enlazar con el propio código. Estos comandos se identifican porque comienzan con una arroba (@). Puede encontarse la definición y descripción de todos ellos en la siguiente dirección web: http://www.stack.nl/~dimitri/doxygen/commands.html. Algunos que se usarán con más frecuencia son (entre [ ] el texto a completar): ● @author [nombre]: indica el autor ● @ingroup [grupo]: indica el grupo o paquete al que pertenece el código ● @date [fecha]: indica la fecha ● @var [tipo]: indicar el tipo de variable ● @param [variable] [descripción]: explica la naturaleza y uso del parámetro de una función ● @return [descripción]: descripción de la variable de retorno ● @retval [variable] [descripción]: tipo de variable de retorno y su descripción ● @public: para indicar que una variable o método es público ● @private: para indicar que una variable o método es privado ● @static: para indicar que una variable o método es estático Cabeceras de ficheros Cada fichero, bien sea una clase, un conjunto de funciones o un código sin jerarquía, debe incluir en su inicio (cabecera) una descripción de su objetivo, INFORMACIÓN CONFIDENCIAL No se permite su reproducción, modificación, comunicación o distribución sin autorización del propietario BIKO© Todos los derechos reservados Pol. Industrial Mutilva Baja, Calle E, Nº 5 1ºC, Mutilva Baja Tel. 948 072222 – Fax. 948 072223 – [email protected] - http://www.biko2.com 6 incluyendo además por lo menos el nombre del autor, la fecha y grupo o paquete al que pertenece (si es aplicable). Ejemplo (completo): /** * Realiza labores de maquetacion y calculo de los elementos de paginacion * Distingue entre páginas a seleccionar y la página seleccionada, dando la * opcion de establecer representaciones distintas. El resto del código HTML, * anterior y posterior, corre a manos del programador. * * @brief Maquetación y cálculo de paginaciones * @author Fran Naranjo * @package Publisher * @date 2005-11 */ Métodos y funciones Cada método y función deberá llevar un comentario indicando su función. Además, se indicará de qué tipo es (público, privado o estático si es aplicable), qué parámetros tiene y valor de retorno. Estos dos últimos elementos son muy importantes, ya que PHP no está tipado y por lo tanto será de referencia indicar en esta parte qué parámetros se deben pasar y de qué forma, así como el valor que se retorna. Ejemplo (completo): INFORMACIÓN CONFIDENCIAL No se permite su reproducción, modificación, comunicación o distribución sin autorización del propietario BIKO© Todos los derechos reservados Pol. Industrial Mutilva Baja, Calle E, Nº 5 1ºC, Mutilva Baja Tel. 948 072222 – Fax. 948 072223 – [email protected] - http://www.biko2.com 7 /** * Establece los filtros para aceptar o denegar nodos a presentar * Se establecen 3 tipos de filtros: * - accept: $nodes contiene un array con los nodos a aceptar. * Únicamente se presentarán estos nodos * - reject: $nodes contiene un array con los nodos a denegar. * El resto de nodos que no coincidan en esta lista, se mostrarán * - all: se aceptan todos los nodos. El contenido de $nodes se descarta * * @param $tipo tipo de filtro: "accept", "reject" o "all" * @param $nodes array con nodos. Úicamente para los tipos "accept" o "reject" * @return void * @public */ function setFilter($tipo, $nodes = array()) { } Nombre de los ficheros Los siguientes ficheros deberán seguir ciertas pautas en su nomenclatura: ● Clases: nombre de la clase terminado en .class.php. Por ejemplo, Menus.class.php ● Ficheros HTML o XHTML: terminados en .html. Por ejemplo, cabecera.html ● Ficheros de XTemplate: terminados en .xtpl. Por ejemplo: menu.xtpl ● Includes de php: terminados en .inc.php También se permitirán includes de php de la forma inc_[nombre].php aunque se prefiere la forma indicada anteriormente. Nomenclatura Todas las funciones y variables (incluyendo métodos y propiedades de las clases) comenzarán con letra minúscula y para palabras compuestas se usará una letra mayúscula para cada palabra. Se evitará el uso de guiones bajos (_) y repetir dos o más mayúsculas seguidas. Se debe intentar no usar nombres demasiado largos, INFORMACIÓN CONFIDENCIAL No se permite su reproducción, modificación, comunicación o distribución sin autorización del propietario BIKO© Todos los derechos reservados Pol. Industrial Mutilva Baja, Calle E, Nº 5 1ºC, Mutilva Baja Tel. 948 072222 – Fax. 948 072223 – [email protected] - http://www.biko2.com 8 pero sin comprometer el significado de la función. Ejemplo: function getRenderFromFilename($filename) Para asignación y recuperación de variables o valores, se preferirá el uso de las palabras set y get respectivamente. Todos aquellos métodos o propiedades de una clase que se consideren privados, deberán comendar con un "guión bajo" (_). Ejemplo: function _setItems($items) { $this->_items = $items; } Para acceder a los elementos de un array mediante su clave, usaremos literales de texto. Ejemplo: Usar $tabla['id'] y no $tabla[id] Espaciado Se deben separar todos los elementos y estructuras de modo que se permita una fácil lectura. Separando cada elemento de los demás mediante espacios, cambios de línea o tabuladores mejoraremos esta lectura. INFORMACIÓN CONFIDENCIAL No se permite su reproducción, modificación, comunicación o distribución sin autorización del propietario BIKO© Todos los derechos reservados Pol. Industrial Mutilva Baja, Calle E, Nº 5 1ºC, Mutilva Baja Tel. 948 072222 – Fax. 948 072223 – [email protected] - http://www.biko2.com 9 Asignaciones y operaciones Usar un espacio entre cada término y operador utilizado. Ejemplos: ● ● ● ● $a = 4 * $b + calcula(); $c += 4; $this->final = $inicio . $medio . $final; [En un array] 'index' => 'value' Funciones y métodos Cada uno de los parámetros de una función o método deben estar separados por un espacio tras la coma que los diferencia, pero no antes. Los paréntesis con los parámetros de una función o método (aunque no contengan nada) deberán posicionarse junto a la función, al igual que en la llamada a la misma. La llave de inicio deberá estar en esta misma línea y separada por un espacio. Ejemplo: function getRenderSingle($pag_offset, $texto) { } Estructuras de control Deberán seguirse las indicaciones marcadas para las funciones, asignaciones y operaciones. Además, para el caso de la sentencia for, deberán separarse todos sus elementos Ejemplos: ● ● ● while($a < 0 && $b > 100) for($i = 0; $i < $final; $i++) if($a != 1) INFORMACIÓN CONFIDENCIAL No se permite su reproducción, modificación, comunicación o distribución sin autorización del propietario BIKO© Todos los derechos reservados Pol. Industrial Mutilva Baja, Calle E, Nº 5 1ºC, Mutilva Baja Tel. 948 072222 – Fax. 948 072223 – [email protected] - http://www.biko2.com 10 PHP Tags Para identificar código PHP, se usarán el tag de apertura <?php y el tag de cierre ? >. Además para imprimir valores directamente en código HTML, puede usarse el tag <?= ?> Debe evitar usarse el resto de posibilidades disponibles http://www.php.net/manual/en/language.basic-syntax.php. Si se está desarrollando código "en línea" sobre el código HTML (por ejemplo, sin usar plantillas XTemplate, sino directamente) y debemos incluir código HTML, evitaremos el uso de print o echo a favor de cerrar el tag php y volver a abrirlo al finalizar ya que ayudará en gran manera al entender el código y a realizar posteriores cambios parciales o totales. Ejemplo: if($ponerMenu) { ?><ul id="menu"><?php foreach($entradas AS $entrada) { ?><li class="opcion"><?= entrada ?></li><?php } ?></ul><?php } Codificación y caracteres Excepto que el proyecto en el que se esté trabajando tenga algún requerimiento especial y por lo tanto el servidor esté configurado de esa forma, se utilizará una codificación UTF-8. Por lo tanto, deberá configurarse tanto el editor como el sistema para generar y modificar ficheros con esta codificación. INFORMACIÓN CONFIDENCIAL No se permite su reproducción, modificación, comunicación o distribución sin autorización del propietario BIKO© Todos los derechos reservados Pol. Industrial Mutilva Baja, Calle E, Nº 5 1ºC, Mutilva Baja Tel. 948 072222 – Fax. 948 072223 – [email protected] - http://www.biko2.com 11 Se usarán saltos de línea ("intros") al estilo UNIX, también conocido como "\n" evitando otras combinaciones como las Windows/DOS/MAC ("\r\n"). Se deberá usar la comilla simple (') para identificar caracteres utilizando la concatenación para enlazar con variables, menos en los casos en los que el uso de las comillas dobles (") es necesario, por ejemplo para usar caracteres especiales o de control ("\n", "\t", etc) o cuando se use la comilla simple repetidas veces (por ejemplo un SQL: $query = "SELECT * FROM tabla WHERE estado='abierto'";) Buenas prácticas En este apartado se detallarán diversas acciones que se consideran convenientes a la hora de programar en PHP. Antes de realizar asignaciones con variables que se posible que no tengan valor o que incluso no estén definidas, realizar una comprobación con isset() y actuar en consecuencia al resultado de esta función. Por ejemplo, variables pasadas por GET o POST, valores en un array, etc No abusar del uso de las funciones include_once o require_once ya que es posible que nos sirva con include o require. El uso de require_once es muy costoso computacionalmente y no se recomienda su uso excepto en casos que lo requieran. Mejor usar include antes que require si es posible. Cuando se definen tablas (arrays) con varias entradas o con varios niveles, utilizar indentación y una línea para cada entrada. Harán el código más claro y fácil de cambiar. Ejemplo: INFORMACIÓN CONFIDENCIAL No se permite su reproducción, modificación, comunicación o distribución sin autorización del propietario BIKO© Todos los derechos reservados Pol. Industrial Mutilva Baja, Calle E, Nº 5 1ºC, Mutilva Baja Tel. 948 072222 – Fax. 948 072223 – [email protected] - http://www.biko2.com 12 $myArray = array( 'key1' => 'valor1', 'key2' => array( 'key2_1' => 'valor2_1', 'key2_2' => 'valor2_2' ) ); Utilizar funciones "preg" en vez de las "ereg" ya que son mucho más rápidas y eficientes. No usar expresiones regulares en cadenas de texto estáticas. Usar explode(), es mucho más eficiente que split(), str_replace(), strpos() y strtr(). Utilizar path completos en vez de relativos al usar ficheros, se reduce el tiempo que el procesador del servidor tiene que traducir esa dirección. INFORMACIÓN CONFIDENCIAL No se permite su reproducción, modificación, comunicación o distribución sin autorización del propietario BIKO© Todos los derechos reservados Pol. Industrial Mutilva Baja, Calle E, Nº 5 1ºC, Mutilva Baja Tel. 948 072222 – Fax. 948 072223 – [email protected] - http://www.biko2.com 13