Child pages
  • Estándares de desarrollo

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Tabla de contenidos

Table of Contents
maxLevel2

...

Estándares de desarrollo PrestaShop

...

PHP

Nombres de variables

  1. Correspondiente a la información de las bases de datos: $my_var
  2. Correspondiente al algoritmo: $my_var
  3. La visibilidad de una variable miembro no afecta su nombre: private $my_var

Asignaciones

  1. Debe haber un espacio entre la variable y los operadores:

    Code Block
    borderStylesolid
    
    $my_var = 17;
    $a = $b;
    

Operadores

  1. "+", "-", "*", "/", "=" y cualquier combinación de ellos (ej. "/=") necesitan un espacio entre
    miembros de la izquierda y la derecha

    Code Block
    borderStylesolid
    
    $a + 17;
    $result = $b / 2;
    $i += 34;
    
  2. "." no llevan espacio entre los miembros de la izquierda y la derecha

    Code Block
    borderStylesolid
    
    echo $a.$b;
    $c = $d.$this->foo();
    
    Note
    titleRecomendación

    Por motivos de rendimiento, no exceda el uso de la concatenación.

  3. ".=" necesita un espacio entre los miembros de la izquierda y la derecha

    Code Block
    borderStylesolid
    
    $a .= 'Debug';
    

Declaraciones

  1. if, elseif, while, for:deben presentar un espacio entre la palabra clave if y el paréntesis

    Code Block
    borderStylesolid
    
    if (<condition>)
    while (<condition>)
    
  2. Cuando una combinación de if y else else es utilizada y si ambas deben ofrecer un valor, el else debe ser evitado.

    Code Block
    borderStylesolid
    
    if (<condition>)
    	return false;
    return true;
    
    Note
    titleRecomendación

    Le recomendamos un resultado por método / función

  3. Cuando un método / función ofrece un valor booleano y el valor actual del método / función depende de ello, la declaración if debe ser evitada

    Code Block
    borderStylesolid
    
    public aFirstMethod()
    {
    	return $this->aSecondMethod();
    }
    
  4. Las pruebas deben ser agrupadas por "entidad"

    Code Block
    borderStylesolid
    
    if ($price AND !empty($price))
    	[...]
    if (!Validate::$myObject OR $myObject->id === NULL)
    	[...]
    

...

  1. La visibilidad debe definirse en cada momento, incluso cuando se trata de un método público.
  2. El orden de las propiedades del método debe ser: visibility static function name()

    Code Block
    borderStylesolid
    
    private static function foo()
    

Nombres de Método / Función

  1. Los nombres del método y la función comienzan siempre con un carácter en minúscula y cada una de las palabras siguientes deben comenzar con un carácter en mayúsculas (CamelCase)

    Code Block
    borderStylesolid
    
    public function myExempleMethodWithALotOfWordsInItsName()
    
  2. Los corchetes que se presentan en el código del método tienen que ser precedidos por un retorno

    Code Block
    borderStylesolid
    
    public function myMethod($arg1, $arg2)
    {
    	[...]
    }
    
  3. Los nombres de los métodos y las funciones deben ser nombres explícitos, por lo tanto nombres de función como "b()" o "ef()" están completamente prohibidos.

    Info
    titleExcepciones

    Las únicas excepciones son la función de traducción llamada "l()" y las funciones de depuración "p()", "d()".

...

Code Block
borderStylesolid

protected function myProtectedMethod($arg1, $arg2, $arg3 = null)

Objetos / Clases

  1. El nombre del objeto debe colocarse en singular

    Code Block
    borderStylesolid
    
    class Customer
    
  2. El nombre de la clase debe seguir el modelo CamelCase, excepto que la primera letra sea mayúscula

    Code Block
    borderStylesolid
    
    class MyBeautifulClass
    

Definiciones

  1. Los nombres de las definiciones deben ser ingresados en mayúsculas
  2. Los nombres de las definiciones deben contar con el prefijo "PS_" dentro del núcleo y el módulo

    Code Block
    borderStylesolid
    
    define('PS_DEBUG', 1);
    define('PS_MODULE_NAME_DEBUG', 1);
    
  3. Los nombres de las definiciones no permiten caracteres alfabéticos. Excepto “_”.

...

Code Block
borderStylesolid

echo 'Debug';
$myObj->name = 'Hello '.$name;

...

  1. Dentro de las funciones y métodos, sólo la etiqueta "//" de comentario es permitida
  2. Después de la etiqueta "//" de comentario, un espacio “// Comment“ es necesario

    Code Block
    borderStylesolid
    
    // My great comment
    
  3. La etiqueta "//" de comentario es permitida al final de una línea de código

    Code Block
    
    $a = 17 + 23; // A comment inside my exemple function
    
  4. Funciones y métodos externos, sólo las etiquetas "/" y "/" de comentario son permitidas

    Code Block
    borderStylesolid
    
    /* This method is required for compatibility issues */
    public function foo()
    {
    // Some code explanation right here
    [...]
    }
    
  5. Comentario PHP Doc Element es necesario antes de las declaraciones de método

    Code Block
    borderStylesolid
    
    /**
     * Return field value if possible (both classical and multilingual fields)
     *
     * Case 1 : Return value if present in $_POST / $_GET
     * Case 2 : Return object value
     *
     * @param object $obj Object
     * @param string $key Field name
     * @param integer $id_lang Language id (optional)
     * @return string
     */
    protected function getFieldValue($obj, $key, $id_lang = NULL)
    
    Info
    titlePara más información

    Para más información acerca de la regla PHP Doc: vea este enlace útil

Devolución de valores

  1. Las declaraciones de devolución no necesitan paréntesis, excepto cuando se trata de una expresión compuesta

    Code Block
    borderStylesolid
    
    return $result;
    return ($a + $b);
    return (a() - b());
    return true;
    
  2. Desarmar una función

    Code Block
    borderStylesolid
    
    return;
    

Llamada

La función de llamada precedida por una "@" está prohibida pero tenga cuidado con la llamada a la función / método con login / contraseña o ruta de argumentos.

Code Block
borderStylesolid

myfunction()
// En el siguiente ejemplo colocamos una @ por motivos de seguridad 
@mysql_connect([...]);

Etiquetas

  1. Una línea en blanco debe dejarse después de la etiqueta de apertura de PHP

    Code Block
    borderStylesolid
    
    <?php
    
    require_once('my_file.inc.php');
    
  2. La etiqueta final de PHP está prohibida

...

  1. El carácter de tabulación ("\t") es el único caracter de indentación que se permite
  2. Cada nivel de indentación debe ser representado por un solo caracter de tabulación

    Code Block
    borderStylesolid
    
    function foo($a)
    {
    	if ($a == null)
    		return false;
    	[...]
    }
    

Matriz

  1. La palabra clave de la matriz no debe ser seguida por un espacio

    Code Block
    borderStylesolid
    
    array(17, 23, 42);
    
  2. La indentación debe ser de la siguiente forma cuando muchos datos se encuentran dentro de una matriz:

    Code Block
    borderStylesolid
    
    $a = array(
    	36 => $b,
    	$c => 'foo',
    	$d => array(17, 23, 42),
    	$e => array(
    		0 => 'zero',
    		1 => $one
    	)
    );
    

...

Code Block
borderStylesolid
if (!$result)
	return false;

for ($i = 0; $i < 17; $i++)
	if ($myArray[$i] == $value)
		$result[] = $myArray[$i];
	else
		$failed++;

Seguridad

  1. Toda la información de los usuarios (ingresada por ellos) debe ser moldeada.

    Code Block
    borderStylesolid
    
    $data = Tools::getValue('name');
    
    $myObject->street_number = (int)Tools::getValue('street_number');
    
  2. Todos los parámetros de método / función deben ser ingresados cuando son recibidos (con Array u Object).

    Code Block
    borderStylesolid
    
    public myMethod(Array $var1, $var2, Object $var3)
    
  3. Todos los demás parámetros, deben ser moldeados cada vez que se usen, pero no cuando
    son enviados a otros métodos / funciones

    Code Block
    borderStylesolid
    
    protected myProtectedMethod($id, $text, $price)
    {
    	$this->id = (int)$id;
    	$this->price = (float)$price;
    	$this->callMethod($id, $price);
    }
    

...

  1. Está prohibido el uso de un ternario en otro ternario
  2. Recomendamos utilizar && y || en sus condiciones
  3. Por favor, no use los parámetros de referencia

SQL

Nombres de tablas

  1. Los nombres de tablas deben comenzar con el prefijo de PrestaShop "DB_PREFIX"

    Code Block
    borderStylesolid
    
    [...] FROM `'. _DB_PREFIX_.'customer` [...]
    
  2. Los nombres de tablas deben tener el mismo nombre que el objeto que reflejan
    por ejemplo "ps_cart"
  3. Los nombres de tablas deben permanecer en singular
    por ejemplo "ps_order"
  4. Información de idioma debe ser almacenada en una tabla denominada exactamente como uno de los objetos y con el sufijo "_lang" ej. "ps_product_lang"

Consulta SQL

  1. Las palabras clave deben ser escritas en mayúsculas.

    Code Block
    borderStylesolid
    
    SELECT `firstname`
    FROM `'. _DB_PREFIX_.'customer`
    
  2. Las comillas inversas ("`") deben ser utilizadas alrededor de nombres de campo y tabla

    Code Block
    borderStylesolid
    
    SELECT p.`foo`, c.`bar`
    FROM `'. _DB_PREFIX_.'product` p, `'. _DB_PREFIX_.'customer` c
    
  3. Los alias de tablas deben ser realizados utilizando la primera letra de cada palabra y deben estar en minúsculas

    Code Block
    borderStylesolid
    
    SELECT p.`id_product`, pl.`name`
    FROM `'. _DB_PREFIX_.'product` p
    NATURAL JOIN `'. _DB_PREFIX_.'product_lang` pl
    
  4. Cuando ocurran conflictos entre los alias de tablas, el segundo carácter también debe ser tomado.

    Code Block
    borderStylesolid
    
    SELECT ca.`id_product`, cu.`firstname`
    FROM `'.DB_PREFIX.'cart` ca, `'. _DB_PREFIX_.'customer` cu
    
  5. La indentación se debe realizar para cada cláusula

    Code Block
    borderStylesolid
    
    $query = 'SELECT pl.`name`
    FROM `'.PS_DBP.'product_lang` pl
    WHERE pl.`id_product` = 17';
    
  6. Está prohibido realizar una combinación en la cláusula WHERE

...

Puede instalar PHP CodeSniffer sin tener que utilizar Eclipse, utilizando la línea de comandos.

Code Block

apt-get install php-pear
pear install PHP_CodeSniffer
svn co http://svn.prestashop.com/branches/norm/ /usr/share/php/PHP/CodeSniffer/Standards/Prestashop
phpcs --config-set default_standard Prestashop

...