Résumé
PHP, http://www.php.net, est l'un des langages de programmation les plus populaires pour la réalisation de sites web dynamiques. Cet engouement est sans nul doute lié d'une part au faible coût de sa mise en œuvre (PHP est disponible chez quasiment tous les hébergeurs) ; et d'autre part par le laxisme autorisé par le langage (il faut l'avouer, PHP est boulet-friendly, alors que d'autres langages sont tout bonnement inutilisables si on n’a pas un minimum de connaissances en développement).Ainsi, si le langage montre des limitations aberrantes (comme l'obligation de passer par une variable intermédiaire pour récupérer le énième élément d'un tableau renvoyé par une fonction) ; si le style est ridicule (certains éléments sont sensibles à la casse, d'autres non) ; si les modifications de l'API tiennent du guignolesque (par exemple la fonction is_a() rendue obsolète en PHP 5.0.0 et réintégrée en 5.3.0) ; si on nous promet que PHP est un langage orienté objet, alors que dans les faits, on est en droit d'avoir de sérieux doutes (par exemple, les tableaux n'ont pas de méthode) ; et si mettre le doigt sur un de ces éléments dans le bug-tracker ne permet que d'avoir une réponse du type « ça n'est pas un bug, c'est un feature », relisez ce qui est indiqué dans la documentation, voire arrêtez de nous donner des cours de LALR, PHP reste une plate-forme très populaire pour la réalisation de sites internet.
1. Problématique
L'un des problèmes souvent rencontrés avec les langages dynamiques tels que PHP est l'utilisation d'une variable non déclarée, suite à une erreur de frappe ou un peu de refactoring. Considérons l'exemple ci-dessous :
L'utilisation de la variable $Foo, non initialisée ne pose pas de problème particulier à l'interpréteur, et à moins d'avoir défini le rapport d'erreurs E_NOTICE (désactivé par défaut), il n'y aura pas d'avertissement de PHP. Je fais ici une parenthèse sur l'error_reporting : une bonne habitude est de le positionner à E_ALL | E_STRICT pour le développement, cela permet d'une part d'éviter les étourderies, et d'autre part (comme la plupart du temps, on en revient à faire du PHP car on fait évoluer un blob plus ou moins immonde) cela permet de voir quelle confiance on peut avoir en ce code.
Ce problème d'utilisation de variables non initialisées devient encore plus fréquent lorsque...