...
Table of Contents | ||
---|---|---|
|
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 | ||
---|---|---|
| ||
$my_var = 17; $a = $b; |
Operators
"
+
", "-
", "*
", "/
", "=
" and any combination of them (e.g. "/=
") need a space between their left and right members.Code Block borderStyle solid $a + 17; $result = $b / 2; $i += 34;
"
.
" does not have a space between its left and right members.Code Block borderStyle solid echo $a.$b; $c = $d.$this->foo();
Note title Recommendation For performance reasons, please do not overuse concatenation.
"
.=
" needs a space between its left and right members.Code Block borderStyle solid $a .= 'Debug';
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)
...
if
,elseif
,while
,for
: need a space between theif
keyword and the parentheses()
.Code Block borderStyle solid if (<condition>) ... while (<condition>)
When a combination of
if
andelse
is used and both can return a value, theelse
has to be omitted.Code Block borderStyle solid if (<condition>) return false; return true;
Note title Recommendation We recommend one return per method/function.
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 borderStyle solid public aFirstMethod() { return $this->aSecondMethod(); }
Tests must be grouped by entity.
Code Block borderStyle solid if ($price AND !empty($price)) ... if (!Validate::$myObject OR $myObject->id === NULL) ...
...
- Inside functions and methods, only the "
//
" comment tag is allowed. After the "
//
" comment marker, a space is required:// Comment
.Code Block borderStyle solid // My great comment
The "
//
" comment marker is tolerated at the end of a code line.Code Block borderStyle solid $a = 17 + 23; // A comment inside my example function
Outside of functions and methods, only the "
/
" and "/
" comment markers are allowed.Code Block borderStyle solid /* This method is required for compatibility issues */ public function foo() { // Some code explanation right here ... }
PHP Doc comment block is required before the declaration of the method.
Code Block borderStyle solid /** * 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 title For more informations For more information about the PHP Doc syntax: http://manual.phpdoc.org/HTMLSmartyConverter/HandS/phpDocumentor/tutorial_tags.pkg.html.
Return values
The
return
statement does not need brackets, except when it deals with a composed expression.Code Block borderStyle solid return $result; return ($a + $b); return (a() - b()); return true;
The
return
statement can be used to break out of a function.Code Block borderStyle solid return;
...
Keywords must be written in uppercase.
Code Block borderStyle solid SELECT `firstname` FROM `'._DB_PREFIX_.'customer`
Back quotes ("
`
") must be used around SQL field names and table names.Code Block borderStyle solid SELECT p.`foo`, c.`bar` FROM `'._DB_PREFIX_.'product` p, `'._DB_PREFIX_.'customer` c
Table aliases have to be named by taking the first letter of each word, and must be lowercase.
Code Block borderStyle solid SELECT p.`id_product`, pl.`name` FROM `'._DB_PREFIX_.'product` p NATURAL JOIN `'._DB_PREFIX_.'product_lang` pl
When conflicts between table aliases occur, the second character has to be also used in the name.
Code Block borderStyle solid SELECT ca.`id_product`, cu.`firstname` FROM `'._DB_PREFIX_.'cart` ca, `'._DB_PREFIX_.'customer` cu
Indentation has to be done for each clause.
Code Block borderStyle solid $query = 'SELECT pl.`name` FROM `'._DB_PREFIX_.'product_lang` pl WHERE pl.`id_product` = 17';
- It is forbidden to make a
JOIN
in aWHERE
clause.
Installing the code validator
...