Message-ID: <1053885537.375794.1710837601773.JavaMail.root@confluence-doc2-production> Subject: Exported From Confluence MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_Part_375793_320101686.1710837601767" ------=_Part_375793_320101686.1710837601767 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/exported.html
Table of contents
$my_var
.$my_var
.pri=
vate $my_var
.$my_var = =3D 17; $a =3D $b;=20
"+", "-", "*", "/", "=3D" and any combination of them (e.g. "/=3D") = need a space between their left and right members.
$a + 17; $result =3D $b / 2; $i +=3D 34;=20
"." does not have a space between its left and right members.
echo $a.= $b; $c =3D $d.$this->foo();=20
Recommendation
For performance reasons, please do not overuse concatenation.
".=3D
" needs a space between its left and right members=
.
$a .=3D = 'Debug';=20
if, elseif, while, for: need a space between the if
key=
word and the bracket ()
.
if (<= condition>) ... while (<condition>)=20
When a combination of if and else is used and both can return a valu= e, the else has to be avoided.
if (<= condition>) =09return false; return true;=20
Recommendation
We recommend one return per method / function
When a method/function returns a boolean and the current method/func= tion's returned value depends on it, the if statement has to be avoided
public a= FirstMethod() { =09return $this->aSecondMethod(); }=20
Tests must be grouped by "entity"
if ($pri= ce AND !empty($price)) =09... if (!Validate::$myObject OR $myObject->id =3D=3D=3D NULL) =09...=20
The order of the method properties should be: visibility static function functionName()
.
private = static function foo()=20
Method and function names always use CamelCase: begin with a lowerca= se character and each following words must begin with an uppercase characte= r.
public f= unction myExampleMethodWithALotOfWordsInItsName()=20
Braces introducing method code have to be preceded by a carriage ret= urn.
public f= unction myMethod($arg1, $arg2) { =09... }=20
Method and function names must be explicit, so function names such a=
s b()
or ef()
are completely forbidden.
Exceptions
The only exceptions are the translation function (called l()
) and debug the functions (named p()
and d()
).=
p>
Commas have to be followed (and not preceded) by a space.
protecte= d function myProtectedMethod($arg1, $arg2, $arg3 =3D null)=20
Object name must be singular.
class Cu= stomer=20
Class name must follow the CamelCase practice, except that the first= letter is uppercase.
class My= BeautifulClass=20
Define names have to be prefixed by "PS_" inside the core and module=
define('= PS_DEBUG', 1); define('PS_MODULE_NAME_DEBUG', 1);=20
All keywords have to be lowercase: as, case, if, echo, null
=
.
Constants must be uppercase, except for "true", "false" and "null" which=
must be lowercase: ENT_NOQUOTE
, true
.
Configuration variables follow the same rules as defined above.
Strings have to be surrounded by simple quotes, never double ones.
echo 'De= bug'; $myObj->name =3D 'Hello '.$name;=20
After the "//" comment marker, a space is required: // Comment=
.
// My gr= eat comment=20
The "//" comment marker is tolerated at the end of a code line.
$a =3D 1= 7 + 23; // A comment inside my example function=20
Outside of functions and methods, only the "/" and "/" comment markers are allowed.
/* This = method is required for compatibility issues */ public function foo() { =09// Some code explanation right here =09... }=20
PHP Doc comment block is required before the declaration of the meth= od.
/** * 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 =3D NULL)=20
For more informations
For more informations about the PHP Doc syntax: http://manual.phpdoc.org/HTMLSmar= tyConverter/HandS/phpDocumentor/tutorial_tags.pkg.html
The return statement does not need brackets, except when it deals wi= th a composed expression.
return $= result; return ($a + $b); return (a() - b()); return true;=20
The return statement can be used to break out of a function.
return;=20
Function call preceded by a "@" is forbidden but beware with function / = method call with login / password or path arguments.
myfuncti= on() // In the following example, we put a @ for security reasons @mysql_connect(...);=20
There must be an empty line after the PHP opening tag.
<?php require_once('my_file.inc.php');=20
Each indentation level must be represented by a single tabulation ch= aracter.
function= foo($a) { =09if ($a =3D=3D null) =09=09return false; =09... }=20
The array
keyword must not be followed by a space.
array(17= , 23, 42);=20
When too much data is inside an array, the indentation has to follow= the following.
$a =3D a= rray( =0936 =3D> $b, =09$c =3D> 'foo', =09$d =3D> array(17, 23, 42), =09$e =3D> array( =09=090 =3D> 'zero', =09=091 =3D> $one =09) );=20
Braces are prohibited when they only define one instruction or a combina= tion of statements.
if (!$re= sult) =09return false; for ($i =3D 0; $i < 17; $i++) =09if ($myArray[$i] =3D=3D $value) =09=09$result[] =3D $myArray[$i]; =09else =09=09$failed++;=20
All user's data (data entered by users) has to be cast.
$data = =3D Tools::getValue('name'); $myObject->street_number =3D (int)Tools::getValue('street_number');=20
All method/function's parameters must be typed (when Array or Object= ) when received.
public m= yMethod(Array $var1, $var2, Object $var3)=20
For all other parameters, they have to be cast each time they are us= ed, except when they are sent to other methods/functions.
protecte= d myProtectedMethod($id, $text, $price) { =09$this->id =3D (int)$id; =09$this->price =3D (float)$price; =09$this->callMethod($id, $price); }=20
ec=
ho ((true ? 'true' : false) ? 't' : 'f');
).&&
and ||
int=
o your conditions: echo ('X' =3D=3D 0 && 'X' =3D=3D true
Table names must begin with the PrestaShop "DB_PREFIX" pref= ix.
... FROM= `'. _DB_PREFIX_.'customer` ...=20
Keywords must be written in uppercase.
SELECT `= firstname` FROM `'. _DB_PREFIX_.'customer`=20
Back quotes ("`") must be used around SQL field names and table name= s.
SELECT p= .`foo`, c.`bar` FROM `'. _DB_PREFIX_.'product` p, `'. _DB_PREFIX_.'customer` c=20
Table aliases have to be named by taking the first letter of each wo= rd, and must be lowercase.
SELECT p= .`id_product`, pl.`name` FROM `'. _DB_PREFIX_.'product` p NATURAL JOIN `'. _DB_PREFIX_.'product_lang` pl=20
When conflicts between table aliases occur, the second character has= to be also used in the name.
SELECT c= a.`id_product`, cu.`firstname` FROM `'.DB_PREFIX.'cart` ca, `'. _DB_PREFIX_.'customer` cu=20
Indentation has to be done for each clause
$query = =3D 'SELECT pl.`name` FROM `'.PS_DBP.'product_lang` pl WHERE pl.`id_product` =3D 17';=20
This is a brief tutorial on how to install a code validator on your PC a= nd use it to validate your files. The code validator uses PHP CodeSniffer, = which is a PEAR package (http://pear.php.net/package= /PHP_CodeSniffer/). The PrestaShop code standard was created specifical= ly for CodeSniffer, using many rules taken from existing standards, with ad= ded customized rules in order to better fit our project.
You can download the PrestaShop code standard using Git: https://github.com/PrestaShop/PrestaShop-norm-val= idator (you must perform this step before going any further with this t= utorial).
Quick links:
If you use Eclipse, you can integrate code validation within the text ed= itor using a plugin, which is very easy to install: http://www.phpsrc.org/projects/pti/wiki/Installation.
The configuration of the plugin is also very simple: http://www.phpsrc.org/projects/pti-php-codesni= ffer/wiki/Configuration. In the list of available packages, only choose= PHP CodeSniffer and PEAR if you do not yet have them.
You will then have to add the PrestaShop code standard to the Eclipse pr= eferences: go to "PHP Tools" and choose the PS standard that you downloaded= earlier (see link above).
If the file does not automatically validate, as it should, you can confi= gure this in the "Preferences" menu, "Validation" option. Otherwise, just r= ight-click on the folder/file in the file-tree, and choose "PHP Tools" in t= he contextual menu (which you can also be set as a shortcut).
You do not have to use Eclipse to use PHP CodeSniffer, you can also inst= all it so that it can be called from the command line.
$> apt-get install p=
hp-pear
$> pear install PHP_CodeSniffe=
r
$> git clone =
https://github.com/PrestaShop/PrestaShop-=
norm-validator /usr/share/php/PHP/CodeSniffer/St=
andards/Prestashop
$> phpcs --config-set default_stand=
ard Prestashop
The various options for this command are well explained in its documenta= tion. For now, here is the easy way to launch it:
$> ph= pcs --standard=3D/path/to/norm/Prestashop /folder/or/fileToCheck=20
In order to only display errors, not warnings:
$> ph= pcs --standard=3D/path/to/norm/Prestashop --warning-severity=3D99 /folder/o= r/fileToCheck=20
If you have already manually installed PHP CodeSniffer, the program shou= ld be in PEAR's "scripts" folder.
Windows users: although the phpcs.bat
file should be in tha=
t "scripts" folder, you might have to edit it in order for it to work prope=
rly (replace the paths with yours):
path/to/= php.exe -d auto_apprend_file=3D"" -d auto_prepend_file -d include_path=3D"p= ath/to/PEAR/" path/to/pear/scripts/phpcs=20
phpcs
program (or phpcs.bat for Windows users).
--sta=
ndard=3DPrestashop
.