Voici les normes que le projet doit suivre, exemples à l'appui.
On adaptera bien sûr les règles aux contraintes de la version de PHP utilisée sur les serveurs de production.
1. Exemple d'une classe
<?php
namespace App\Feature;
use App\Service;
class MyClass implements MyInterface
{
public function myMethod(): bool
{
if () {
}
while() {
}
do {
} while ();
return true;
}
}
Plusieurs règles sont à respecter :
* l'emplacement des accolades
** à la ligne pour la déclaration de la classe et de ses méthodes
** même ligne pour les conditions
* l'emplacement des espaces :
** entre le if/do/while/for/foreach/switch et les parenthèses
* l'emplacement des retours à la ligne :
** retour à la ligne avant le return/if/while/do/switch
* le nom des classes : en StudlyCase (PSR-1)
* le nom des méthodes : en camelCase (PSR-1)
* la visibilité la moins permissive possible est toujours indiquée, que ce soit pour les méthodes/constantes/attributs
* le type d'attribut/argument est toujours indiqué, le type mixed est interdit
* le type de retour des méthodes est toujours indiqué, même le void, le type mixed est interdit
* utiliser le mot clef static partout où cela est possible
* toute classe doit implémenter une interface directement ou par héritage
* toujours utiliser le cas default dans un switch/match
2. Plus de code procédural
Mis à part celui de l'autoload, le projet doit être codé en full POO :
* Plus de fonctions seules : on n'utilise que des méthodes de classes.
* Ne pas utiliser de variable globales mise à part les superglobales
3. Utilisation des superglobales
Les superglobales ($GLOBALS, $_SERVER, $_GET, $_POST, $_FILES, $_COOKIE, $_SESSION, $_REQUEST, $_ENV) ne doivent être utilisées qu'au plus une et une seule fois dans le projet.
Il est strictement interdit d'en modifier directement la valeur.
4. Templating
Ne pas écrire de HTML dans un fichier PHP, utiliser un moteur de template ou créer sa propre solution.
Ne pas utiliser de fonctions natives de sortie standard plus d'une fois dans l'ensemble du projet.
5. Fonctions natives PHP
Autant que faire ce peut, ne pas utiliser plus d'une fois les fonctions natives de PHP dont le rôle est très précis (ex: htmlentities, json_decode...) ou dont le nombre d'arguments facultatifs est important.
Les encapsuler si besoin en définissant des classes à responsabilité unique (ex: class Templater, méthode escape($htmlContent)).
Bien sûr, le but n'est pas de faire une classe par fonction PHP...