Au vu de la quantité de tutoriels PHP de piètre qualité malheureusement propulsés en tête des résultats des principaux moteurs de recherches, il m'apparait essentiel de faire le point sur les bonnes pratiques et les erreurs à éviter en PHP. Avant toute chose, sachez qu'il n'y a aucune manière connue de l'homme de produire un code parfait, l'expérience seule vous apprendra les erreurs à éviter. Il existe cependant quelques cas d'école que vous vous devez de connaître. ![Good Code](http://imgs.xkcd.com/comics/good_code.png) ## Ce qu'il faut éviter ### Désactiver les erreurs avec @ Exemple:

Erreur de requête

"; } } ?> Pour expliquer en quoi cette pratique est mauvaise, en dehors de la lisibilité dégradée qu'elle provoque, un petit rappel sur le protocole HTTP s'impose. Le protocole HTTP sépcifie que les échanges entre le client (le navigateur) et le serveur (Apache + PHP) sont formés de deux parties: + L'en-tête (header) qui contiens les informations relatives à la requête / réponse + le corp (body) qui contiens le contenu de la réponse Exemple de requête HTTP: GET /hello.php HTTP/1.1 Host: localhost Accept: */* Exemple de réponse HTTP: HTTP/1.1 200 Ok Content-Type: text/plain Content-Length: 12 Helloworld! Il y a en réalité davantage de headers envoyés mais pour simplifier, je ne vous ai mis que les plus importants. Cet exemple d'échange HTTP se produit lors de l'appel de http://localhost/hello.php, un simple script dont le corp se résume à `` Lors que votre script PHP est appellé, il envoie le contenu produit dans le corp de la réponse, mais ce que vous ne voyez pas, c'est qu'avant d'envoyer le corp Apache à envoyé les en-têtes (pour décrire le status de la réponse, le type de données servies, etc.) alors que votre script ne lui a pourtant rien demandé. Ce qu'il est important de savoir, c'est que l'envoi des headers se produit _au moment ou vous commencez à afficher quoi que ce soit, y compris un caractère blanc_ (espace, tabulation ou saut de ligne). _"Qu'est ce que ça peut faire ?"_ me direz vous. Eh bien le problème est qu'une fois que les headers ont étés envoyés, vous perdez la possibilité d'en evoyer à nouveau. Si, une fois du produit vous tentez d'utiliser la fonction `header` de PHP, celle-ci échouera et émettra un warning. Vous ne pouvez plus dès lors changer le statut de la réponse (404, 500 ou 403) ni effectuer une redirection par exemple. __Comment corriger ce défaut ?__ Séparez clairement les traitements de l'affichage et afin de respecter au mieux l'indentation de votre flux HTML pour préserver sa lisibilité, utilisez la syntaxe alternative. ## Bonnes pratiques _En cours de rédaction_