Les code PHP doit toujours être délimité par la form complète, les balise PHP standards :
<?php ?>
Les balises courtes d'ouvertures ne sont pas autorisées.
Lorsqu'une chaîne est litérrale (i.e elle ne contient pas de substitution de variables), l'apostrophe ou guillemet simple doit être utilisé pour démarquer la chaîne :
$a = 'Example String';
Lorsque qu'une chaîne litérrale contient des apostrophes, il est permis de les démarquer en utilisant les guillemets doubles Ceci est particulièrement conseillé pour les requêtes SQL :
$sql = "SELECT `id`, `name` from `people` WHERE `name`='Fred' OR `name`='Susan'";
La syntaxe ci-dessus est préférée à l'échappment des aspostrophes.
La substitution des variables est permise en utilisant une de ces deux formes :
$greeting = "Bonjour $name, bienvenue!"; $greeting = "Bonjour {$name}, bienvenue!"; // Cette forme n'est pas permise : $greeting = "Bonjour ${name}, bienvenue!";
Pour des raison d'uniformité, cette forme n'est pas permise :
$greeting = "Bonjour ${name}, bienvenue!";
Les chaînes peuvent êtres concaténées en utilisant l'opérateur ".". Un espace doit toujours être ajouté avant, et après cet opérateur, cela permet d'améliorer la lisibilité:
$company = 'Zend' . 'Technologies';
Lors de la concaténation de chaînes avec l'opérateur ".", il est permis de couper le segment en plusieurs lignes pour améliorer la lisibilité. Dans ces cas, chaque nouvelle ligne doit être remplie avec des espaces, de façon à aligner le "." sous l'opérateur "=" :
$sql = "SELECT `id`, `name` FROM `people` " . "WHERE `name` = 'Susan' " . "ORDER BY `name` ASC ";
L'utilisation d'indices négatifs n'est pas permise.
Un tableau indexé doit commencer avec n'importe quel nombre positifs, cependant cette méthode est déconseillée. Il est conseillé de commencer l'indexation à 0.
Lors de la déclaration de tableaux indexés avec la construction array
, un espace doit être
ajouté après chaque virgule délimitante, pour améliorer la lisibilité :
$sampleArray = array(1, 2, 3, 'Zend', 'Studio');
Il est aussi permis de déclarer des tableaux indexés sur plusieurs lignes en utilisant la construction array
.
Dans ce cas, chaque nouvelle ligne doit être remplie par des espaces jusqu'à ce que cette ligne s'aligne, comme il est montré
dans l'exemple ci-dessous :
$sampleArray = array(1, 2, 3, 'Zend', 'Studio', $a, $b, $c, 56.44, $d, 500);
Lorsque de la déclaration de tableaux associatifs avec la construction array
, il est conseillé de séparer
la définition sur plusieurs lignes. Dans ce cas, chaque ligne successive doit être remplie par des espaces pour que les clés
et les valeurs soient alignées :
$sampleArray = array('firstKey' => 'firstValue', 'secondKey' => 'secondValue');
Les classes doivent être nommées conformément aux convetions suivantes.
L'accolade est toujours écrite dans la ligne sous le nom de la classe (forme "one true brace").
Toutes les classes doivent avoir un bloc de documentation conforme aux standart de PHPDocumentor.
Tout code d'une classe doit être indenté avec 4 espaces.
Une seule classe par fichier PHP.
Le placement de code additionnel dans un fichier de classe est permis, mais déconseillé. Dans ces fichier, deux lignes vides doivent séparer la classe du code PHP additionel.
Voici un exemple d'une déclaration de classe autorisée :
/** * Bloc de documentation */ class SampleClass { // contenu de la classe // qui doit être indenté avec 4 espaces }
Les variables membres doivent être nommées en respectant les conventions de nommage.
Toutes variable déclarée dans une classe doit être listée en haut de cette classe, avant toute déclaration de fonction.
La construction var
n'est pas permise. Les variables membres déclares toujours leur
visibilité en utilisant la construction private
, protected
,
ou public
. L'accès direct à ces variables membres en le rendant publiques est permis mais déconseillé.
Il est préférable d'utiliser des accesseur (set/get).
Les fonctions doivent être nommées en respectant les conventions de nommage.
Les fonctions internes aux classes doivent toujours déclarer leur visibilité en utilisant la construction
private
, protected
, ou public
.
Tout comme les classes, l'accolade ouvrante est toujours écrite sous le nom de la fonction (form "one true brace"). Il n'y a pas d'espace entre le nom de la fonction et les parenthèses des arguments. Il n'y a pas d'espace entre la parenthèse fermante et l'accolade.
Les fonctions globales sont fortement déconseillées.
Voici un exemple d'une déclaration permise d'une fonction de classe :
/* * Bloc de documentation */ function sampleMethod($a) { // contenu de la fonction // qui doit être indenté avec 4 espaces }
NOTE: Le passage par référence est permis uniquement dans la déclaration de la fonction :
function sampleMethod(&$a) {}
L'appel par référence est interdit.
La valeur de retour ne doit pas être entourée de parenthèses. Ceci peut gêner à la lecture et peut aussi casser le code si une méthode est modifiée plus tard pour retourner par référence.
function foo() { // INCORRECT return($this->bar); // CORRECT return $this->bar; }
Les argument d'une fonction sont séparés par un espace après la virgule de délimitation. Voici un exemple d'un appel de fonction qui prend trois arguments :
threeArguments(1, 2, 3);
L'appel par référence st interdit. Référez vous à la section sur la déclaration de fonctions pour la méthode correcte de passer des argument par référence.
Pour les fonctions dont les arguments peuvent être des tableaux, l'appel à la fonction doit inclure la construction "array" et peut être divisé en plusieurs ligne pour améliorer la lecture. Dans ces cas, les standards d'écriture de tableaux s'appliquent aussi :
threeArguments(array(1, 2, 3), 2, 3); threeArguments(array(1, 2, 3, 'Zend', 'Studio', $a, $b, $c, 56.44, $d, 500), 2, 3);
Les structure de contrôles basée sur les construction if
et elseif
doivent avoir un seul espace avant la parenthèse ouvrante de la condition, et un seul espace
après la parenthèse fermante.
Pour la condition entre les parenthèses, les opérateurs doivent être séparés par des espaces pour une meilleure lisibilité. Les parenthèses internes sont conseillées pour améliorer le regroupement logique de longues conditions.
L'accolade ouvrante est écrite sur la même ligne que la condition. L'accolade fermant est toujours écrite sur sa propre ligne. Tout contenu présent à l'intérieur des accolades doit être indenté par 4 espaces.
if ($a != 2) { $a = 2; }
Pour les instruction "if" qui incluent "elseif" ou "else", le formattage doit être comme le montre ces exemples :
if ($a != 2) { $a = 2; } else { $a = 7; } if ($a != 2) { $a = 2; } elseif ($a == 3) { $a = 4; } else { $a = 7; }
PHP permet que ces instruction soient écrites sans accolades dans certaines circonstances. La convention de codage ne fait pas de différentiation et toute les instructions "if", "elseif" et "else" doivent utiliser des accolades.
L'utilisation de la construction "elseif" est permise mais fortement déconseillée au profit de la combinaison "else if".
Les instructions de contrôle avec "switch" ne doivent avoir qu'un seul espace avant ma parenthèse ouvrante de l'instruction conditionnelle, et aussi un seule espace après la parenthèse fermante.
Tout le contenu à l'intérieur de l'instruction "switch" doit être indenté avec 4 espaces. Le contenu sous chaque "case" doit être indenté avec encore 4 espaces supplémentaires.
switch ($numPeople) { case 1: break; case 2: break; default: break; }
La construction default
ne doit jamais être oubliée dans une instruction switch
.
NOTE: It is sometimes useful to write a case
statement which falls through
to the next case by not including a break
or return
in that case. To distinguish
these cases from bugs, any case
statement where break
or return
are
omitted must contain the comment "// break intentionally omitted".
Tous les blocs de documentation ("docblocks") doivent être compatible avec le format phpDocumentor. Décrire le format de phpDocumentor n'est pas du ressort de ce document. Pour plus d'information, visitez http://phpdoc.org/
Tout le fichier de code source écrit pour le Framework Zend ou qui opère avec ce framework doit conteni un docblock du fichier, en haut de chaque fichier, et un docblock de classe immédiatement au dessus de chaque classe. Voici des exemples de tels docblocs :
Chaque fichier qui contient du code PHP doit avoir un bloc d'entête en haut du fichier qui contient au minimum ces balise phpDocumentor :
/** * Description courte du fichier * * Description longue du fichier s'il y en a une * * LICENSE: Informations sur la licence * * @copyright 2005 Zend Technologies * @license http://www.zend.com/license/3_0.txt PHP License 3.0 * @version CVS: $Id:$ * @link http://dev.zend.com/package/PackageName * @since File available since Release 1.2.0 */
Chaque classe doit avoir un docblock qui contient au minimum ces balise phpDocumentor:
/** * Description courte de la classe * * Description longue de la classe, s'il y en a une * * @copyright 2005 Zend Technologies * @license http://www.zend.com/license/3_0.txt PHP License 3.0 * @version Release: @package_version@ * @link http://dev.zend.com/package/PackageName * @since Class available since Release 1.2.0 * @deprecated Class deprecated in Release 2.0.0 */
Chaque fonction, méthode, doit avoir un docblock contenant au minimum :
Une description de la fonction
Tous les arguments
Toutes les valeurs de retour possibles
Il n'est pas nécessaire d'utiliser la balise "@access" parce que le niveau d'accès est déjà connu avec les constrution "public", "private", "protected" utilisée pour déclarer la fonction.
Si une fonction/méthode peut lancer une exception, utilisez "@throws" :
@throws exceptionclass [description]