Poster une réponse  Créer un sujet 
Coder pour pouvoir corriger
Auteur Message
CrazyCat
Administrator
*******


Messages : 130
Groupe : Administrateurs
Inscription : Feb 2007
Statut : Absent
Réputation : 0
Message : #1
Coder pour pouvoir corriger

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:

Code PHP :
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:

Code PHP :
/**
 * 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:

Code PHP :
$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:

Code PHP :
$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:

  1. si vous l'écrasez, vous ne pouvez pas suivre son évolution au fur et à mesure du script, donc les effets de bords seront invisible,
  2. une variable "écrasable" est une variable mal nommée: son nom est trop commun et elle sert de fourre-tout
  3. vous ne pouvez pas identifier clairement à quoi sert la variable.


L'erreur est humaine, mais il faut un ordinateur pour provoquer une catastrophe

Ce message a été modifié le: 08/08/2007 20:41 par CrazyCat.

08/08/2007 20:39
Visiter le site internet de cet utilisateur Trouver tous les messages de cet utilisateur Citer ce message dans une réponse
Poster une réponse  Créer un sujet 

Voir une version imprimable
Envoyer ce sujet à un ami
S'abonner au sujet | Ajouter le sujet aux favoris

Aller à :