Pour information, il existe en PHP différents mode de report d'erreurs. Le mode par défaut renvoit notament les erreurs, et les warning. Or il est également possible d'activer le retour des notices. Ces dernières étant entre autre sensibles aux variables non initialisées.

Cette activation peut se faire entre autre via le fichier php.ini, avec la directive : error_reporting = E_ALL ou via la ligne suivante en début de script : error_reporting(E_ALL);

L'un des intérêts étant entre autre de ne plus perdre du temps à chercher pourquoi une variable mal orthographiée produit des effets de bord incompréhensible.

Exemple de code posant problème avec un error_reporting standart :

<?php

function cocktail($foo, $bar){
	printf("Un %s pour deux %s", $foo, $bars);
}

cocktail('citron', 'verres');

?>
Ce code va générer :

Un citron pour deux 
Et c'est tout à fait logique, vu que la variable $bars n'a pas été au préalable définie, sa valeur est donc nulle.

Par contre en mode E_ALL, le message suivant permet de trouver très rapidement l'origine de l'erreur :

Notice: Undefined variable:  bars in /home/foo/test.php on line 7
La contrepartie de cette méthode plus stricte de développement est d'obliger les développeurs à initialiser toutes ses variables avant de s'en servir.

Exemple avec une concaténation dans une boucle :

<?php

for($i=0, $tmp='' ; $i < 5 ; $i++){
	$tmp .= sprintf("tour de boucle %s<br/>\n", $i);
}

echo $tmp;

?>
L'on est ici obliger en mode E_ALL d'initialiser $tmp avant le premier tour de boucle, pour éviter d'avoir un notice lors de la première tentative de concaténation.

Dans la même veine, pour tester l'existence d'une variable, l'on ne peut pas faire un simple test sur cette variable, mais l'on doit passer par les fonctions de type isset ou empty.

<?php

// test renvoyant un notice
if($foo){
    echo "foo existe<br/>\n";
} else {
    echo "foo n'existe pas<br/>\n";
}

// test ne renvoyant pas de notice
if(isset($foo)){
    echo "foo existe<br/>\n";
} else {
    echo "foo n'existe pas<br/>\n";
}

?>
Un dernier exemple sur un parcours de tableau termine cette série d'exemples sur les initialisations de variable :

<?php

$data = array('foo', 'bar', 'cocktail', 'crevette');

for($i=0, $end=count($data) ; $i <= $end ; $i++){
    printf("%s<br/>\n", $data[$i]);
}

?>
Va produire en sortie :

foo
bar
cocktail
crevette

Notice: Undefined offset:  4 in /home/foo/test.php on line 8
L'on ne peut en effet accéder a l'élement 4 du tableau en lecture, celui-ci n'existant pas.

Toutes ces petites choses peuvent sembler très contraignante pour quelqu'un n'ayant pas forcemment l'habitude de les utiliser. Par contre et là je peux vous l'affirmer pour l'utiliser depuis plus de deux ans au quotidien, les pertes de temps à chercher un bug 'incompréhensible' sont d'autant plus limitées.