Child pages
  • Coding Standards

Versions Compared

Key

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

...

Table of Contents
maxLevel2

Coding Standard

Consistency is important, even more so when writing open-source code, since the code belongs to millions on eyeballs, and bug-fixing relies on this teeming millions to actually locate bugs and understand how to solve it.

This is when, when writing anything for PrestaShop, be it a theme, a module or a core patch, you should strive to follow the following guidelines. They are the ones that the PrestaShop developers adhere to, and following theme is the surest way to have you code be elegantly integrated in PrestaShop.

In short, having code consistency helps keeping the code readable and maintainable.

If use an IDE, you can use the CodeSniffer code validator to help you write better code.

Summary

...

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

Operators

  1. "+", "-", "*", "/", "=" and any combination of them (e.g. "/=") need a space between their left and right members.

    Code Block
    borderStylesolid
    $a + 17;
    $result = $b / 2;
    $i += 34;
    
  2. "." does not have a space between its left and right members.

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

    For performance reasons, please do not overuse concatenation.

  3. ".=" needs a space between its left and right members.

    Code Block
    borderStylesolid
    $a .= 'Debug';
    
  4. When testing a boolean variable, do not use a comparison operator, but directly use the value itself, or the value prefixed with an exclamation mark:

    Code Block
    // do not use this
    if ($var == true)
    // ...nor this
    if ($var == false)
    
    // use this
    if ($var)
    // ...or this
    if (!$var)
    

...

  1. if, elseif, while, for: need a space between the if keyword and the parentheses ().

    Code Block
    borderStylesolid
    if (<condition>)
    	...
    while (<condition>)
    
  2. When a combination of if and else is used and both can return a value, the else has to be omitted.

    Code Block
    borderStylesolid
    if (<condition>)
    	return false;
    return true;
    
    Note
    titleRecommendation

    We recommend one return per method/function.

  3. When a method/function returns a boolean and the current method/function's returned value depends on it, the if statement has to be avoided.

    Code Block
    borderStylesolid
    public aFirstMethod()
    {
    	return $this->aSecondMethod();
    }
    
  4. Tests must be grouped by entity.

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

...

  1. Inside functions and methods, only the "//" comment tag is allowed.
  2. After the "//" comment marker, a space is required: // Comment.

    Code Block
    borderStylesolid
    // My great comment
    
  3. The "//" comment marker is tolerated at the end of a code line.

    Code Block
    borderStylesolid
    $a = 17 + 23; // A comment inside my example function
    
  4. Outside of functions and methods, only the "/" and "/" comment markers are allowed.

    Code Block
    borderStylesolid
    /* This method is required for compatibility issues */
    public function foo()
    {
    	// Some code explanation right here
    	...
    }
    
  5. PHP Doc comment block is required before the declaration of the method.

    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
    titleFor more informations

    For more information about the PHP Doc syntax: http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_tags.pkg.html.

Return values

  1. The return statement does not need brackets, except when it deals with a composed expression.

    Code Block
    borderStylesolid
    return $result;
    return ($a + $b);
    return (a() - b());
    return true;
    
  2. The return statement can be used to break out of a function.

    Code Block
    borderStylesolid
    return;
    

...

  1. Keywords must be written in uppercase.

    Code Block
    borderStylesolid
    SELECT `firstname`
    FROM `'._DB_PREFIX_.'customer`
    
  2. Back quotes ("`") must be used around SQL field names and table names.

    Code Block
    borderStylesolid
    SELECT p.`foo`, c.`bar`
    FROM `'._DB_PREFIX_.'product` p, `'._DB_PREFIX_.'customer` c
    
  3. Table aliases have to be named by taking the first letter of each word, and must be lowercase.

    Code Block
    borderStylesolid
    SELECT p.`id_product`, pl.`name`
    FROM `'._DB_PREFIX_.'product` p
    NATURAL JOIN `'._DB_PREFIX_.'product_lang` pl
    
  4. When conflicts between table aliases occur, the second character has to be also used in the name.

    Code Block
    borderStylesolid
    SELECT ca.`id_product`, cu.`firstname`
    FROM `'._DB_PREFIX_.'cart` ca, `'._DB_PREFIX_.'customer` cu
    
  5. Indentation has to be done for each clause.

    Code Block
    borderStylesolid
    $query = 'SELECT pl.`name`
    FROM `'._DB_PREFIX_.'product_lang` pl
    WHERE pl.`id_product` = 17';
    
  6. It is forbidden to make a JOIN in a WHERE clause.

Installing the code validator

...