Standard "SCS1"

SPIP Coding Standard 1

SPIP est soucieux de la qualité typographique des pages qu’il envoie aux clients HTTP, il est donc lui-même soucieux de celle de ses propres fichiers.

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éclaration global $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;
    

Auteur James Publié le : Mis à jour : 02/07/23