Très souvent, lorsque j'aide des personnes à corriger leurs scripts php, je me rend compte que le code le plus simple peut être rendu compètement illisible, donc impossible à maintenir.
Voici donc des règles que je m'impose et que tout le monde devrait suivre, quel que soit le langage utilisé...
1. Commenter intelligemment
J'ai déjà vu des codes complètement abscons avec comme simple commentaire:
// Ne pas toucher, ça marche (et c'est véridique)
Un commentaire doit être logique et utile. Il ne sert à rien de de commenter une ligne du genre $i++;
Ca n'apporte rien à la compréhension du code et ça surcharge inutilement en faisant disparaître les commentaires utiles dans la masse.
De plus, il existe une norme de documentation pour tout ce qui est fonctions et classes. Ensuite, il faut commenter les boucles (if...then...else, while...do, ...) pour savoir quand on y rentre et quand on en sort.
2. Mise en forme
Si la plupart des programmeurs indentent leur code, ce n'est pas pour rien: ça permet de suivre les enchaînements de manière visuelle.
Mais l'indentation peut aussi être utilisée pour regrouper des données complexes comme un tableau multidimensionnel ou une requète SQL complexe.
3. Eviter les raccourcis
Trop de raccourcis ralenti la correction.
Regardez ce premier exemple:
function test($test) {
return (is_array($test)) ? (array_map('test', $test)) : (stripslashes($test));
}
Il vous faudra un bon bout de temps pour trouver s'il y a une erreur dans cette fonction, ou même pour la comprendre. Alors qu'elle se lit aisémment ainsi:
/**
* Fonction pour supprimer les \ de protection
* @param mixed $test Variable (ou tableau de variable) a traiter
* @return mixed
*/
function test($test) {
if (is_array($test)) {
// $test est un tableau, on passe chaque ligne dans la fonction
array_map('test', $test);
} else {
return stripslashes($test);
}
}
Une autre erreur de ce type est:
$test = mysql_fetch_array(mysql_query("SELECT t.*, t2.field FROM table t JOIN table2 t2 ON t2.pid=t.id WHERE t.id='$id'"));
Ceci est relativement simple mais si vous avez une erreur, vous ne saurez pas où elle se trouve... alors que le code suivant permet de rajouter des echo de debug:
$sql = "SELECT t.*, t2.field
FROM table t
JOIN table2 t2 ON t2.pid=t.id
WHERE t.id='". $id."'";
$res = mysql_query($sql) or die(mysql_error());
if (@mysql_numrows($res)<1) die('Aucun enregistrement');
while ($test = mysql_fetch_array($res)) {
....
}
Ce code est un peu plus poussé et permet d'afficher à chaque étape ce qui se passe.
4. Séparer la logique de l'affichage
Pourquoi inclure du HTML dans le PHP et vice-versa? le code y perd en lisibilité et vous risquez d'avoir des erreurs à cause d'interactions étranges...
Il vaut mieux avoir un echo() qui fasse plusieurs lignes plutôt que de fermer et ouvrir les balises php ou d'utiliser les balises simplifées (<?=$test;?>
5. Bien nommer et gérer ses variables
Une variable ne devrait pas être écrasée au cours d'un script, pour diverses raisons:
- si vous l'écrasez, vous ne pouvez pas suivre son évolution au fur et à mesure du script, donc les effets de bords seront invisible,
- une variable "écrasable" est une variable mal nommée: son nom est trop commun et elle sert de fourre-tout
- vous ne pouvez pas identifier clairement à quoi sert la variable.