Les règles de codage s’appuient sur la recommandation PSR-12 sans la respecter entièrement. voir le détail ci-dessous.
Elles sont techniquement rassemblées dans un ensemble de règles utilisables avec l’outil PHP_CodeSniffer dans l’extension de cet outil spip/coding-standards.
Fichiers
- La balise d’ouverture d’un fichier PHP DOIT être
<?php
. L’ouverture<?
est proscrite. - L’encodage de caractères des fichiers PHP DOIT être UTF-8 sans BOM.
- Tous les fichiers PHP DOIVENT utiliser uniquement la fin de ligne Unix LF (linefeed).
- Tous les fichiers PHP DOIVENT se terminer par une ligne non vide, terminée par un seul LF.
- La balise de fermeture
?>
DOIT être omise des fichiers contenant uniquement du PHP.
Lignes et indentation
- Il NE DOIT PAS y avoir de limite stricte sur la longueur de la ligne.
- La limite souple sur la longueur de ligne DOIT être de 120 caractères.
- Les lignes NE DEVRAIENT PAS dépasser 80 caractères ; les lignes plus longues DEVRAIENT être divisées en plusieurs lignes suivantes de 80 caractères chacune au maximum.
- Il NE DOIT PAS y avoir d’espace à la fin des lignes.
- Des lignes vierges PEUVENT être ajoutées pour améliorer la lisibilité et pour indiquer les blocs de code associés, sauf là où cela est explicitement interdit.
- Il NE DOIT PAS y avoir plus d’une instruction par ligne.
- Contrairement à PSR-12, le code DOIT utiliser une tabulation pour chaque niveau de retrait et NE DOIT PAS utiliser d’espaces pour le retrait.
Fonctions, Classes et Namespaces
- Dans les versions 4.x et antérieures, SPIP ne suit pas de PSR d’autoloading (ex : PSR-4. En conséquence, SCS1 n’impose aucun formalisme pour les namespaces et les classes, y compris les Traits et les interfaces.
- Les fonctions DEVRAIENT être déclarées en snake_case.
- L’accolade ouvrante DOIT être sur la même ligne que le nom de la fonction, et DOIT avoir un espace avant et aucun espace après.
function ma_fonction() { $ma_variable = 0; // … return $mon_resultat; }
Constantes, Variables et propriétés de classe
- Les constantes DOIVENT être déclarées en majuscules avec un tiret bas séparateur et préfixées par un tiret bas.
define('_NOUVELLE_CONSTANTE', true);
- Les variables et les arguments de fonctions DEVRAIENT être déclarées en snake_case.
function ma_super_fonction($un_argument, $autre_argument) { … }
- les propriétés de classe PEUVENT être déclarées en snake_case.
- Les variables globales, dont l’usage est déconseillé, sont référencée par
$GLOBALS['xxx']
et non par une déclarationglobal $xxx
, car cela permet d’être certain de la référence qu’on utilise et de facilement faire la différence lors de la lecture du code.if (isset($GLOBALS['meta']['adresse_site'])) { $adresse = $GLOBALS['meta']['adresse_site']; }
Mots-clés réservés, Structures de contrôle et opérateurs
- Tous les mots-clés et types réservés PHP 12 DOIVENT être en minuscules.
- Tous les nouveaux types et mots-clés ajoutés aux futures versions de PHP DOIVENT être en minuscules.
- La forme courte des mots-clés de "type", quand ils sont présents, DOIT être utilisée, c’est-à-dire bool au lieu de
boolean
, int au lieu d’integer
, etc. - L’accolade ouvrante des structures de contrôle DOIT être sur la même ligne que le nom de la fonction, et DOIT avoir un espace avant et aucun espace après.
- Dans les expressions PHP, laisser un espace de part et d’autre des opérateurs binaires (+, =, *, and, ...).
$hypothenuse = sqrt(($a * $a) + ($b * $b));
- Les opérateurs unaires (!, ...) doivent être collés au paramètre auquel ils s’appliquent.
- la notation courte DOIT être appliquée sur les tableaux
$tableau = [ 'cle' => 'valeur', ... ];
Opérations sur les chaines de caractères
- Utilisez les guillemets doubles uniquement quand cela est nécessaire. Si vous n’avez pas de variable ($var) ou de caractère de contrôle (\n, \r, \t...) à évaluer dans la chaîne, utilisez les guillemets simples.
$chaine = "<a href=\"$url\">Lien</a>\n"; $chaine2 = 'Une simple phrase : ' . $autre_chose;