10.Déboguer une application PHP

10.2.Via la fonction echo() (simple mais non professionnel)

Nous vous avons présenté en introduction[où?], 3 méthodes plus ou moins simples, plus ou moins efficaces et plus ou moins professionnelles pour déboguer du code PHP. Voici, la version la plus simple et la moins professionnelle mise en oeuvre dans un exemple (affreux) de script. Celui-ci a été "agrémenté" d'appels de type echo() afin d'en suivre le déroulé et le contenu de variables (ici, un tableau). L'occasion surtout de rappeler l'existence de fonctions et constantes qui peuvent être utiles en d'autres circonstances.
<?php
function maFonction()
{
    echo 'J\'entre dans la fonction '.__FUNCTION__."\n";
    $tableau = array_rand(array_fill(0, 100, 2), 3);
    echo 'Le contenu du tableau est '.var_export($tableau, true)."\n";
    echo 'var_dump quant à lui retourne:'."\n";
    var_dump($tableau);
    echo 'Je suis la ligne '.__LINE__."\n";

    $exc = new \Exception();
    echo '$exc est un objet de classe '.get_class($exc)."\n";
}

class MaClasse
{
    static public function maMethode()
    {
        echo 'J\'entre dans la méthode au nom complet '.__METHOD__."\n";
        echo 'Elle fait partie de la classe '.__CLASS__."\n";
        echo 'La méthode (sans le nom de la classe) est '.__FUNCTION__."\n";
        // Insérer ici le code de la méthode
        maFonction();
    }
}

MaClasse::maMethode();
Un appel à ce script retournera quelque chose comme
<?php
J'entre dans la méthode au nom complet MaClasse::maMethode
Elle fait partie de la classe MaClasse
La méthode (sans le nom de la classe) est maMethode
J'entre dans la fonction maFonction
Le contenu du tableau est array (
  0 => 37,
  1 => 48,
  2 => 76,
)
var_dump quant à lui retourne:
array(3) {
  [0]=>
  int(37)
  [1]=>
  int(48)
  [2]=>
  int(76)
}
Je suis la ligne 9
$exc est un objet de classe Exception
On notera donc l'utilisation de:
  • __CLASS__ pour l'affichage du nom de la classe en cours d'exécution
  • __METHOD__ pour l'affichage du nom complet (incluant le nom de la classe) de la méthode en cours d'exécution
  • __FUNCTION__ pour l'affichage du nom de la fonction ou de la méthode (sans le nom de la classe) en cours d'exécution
  • __LINE__ pour l'affichage du numéro de la ligne en cours d'exécution
  • var_dump() pour l'affichage du contenu d'un tableau (le rendu peut différer selon qu'une extension type Xdebug a été installée ou non)
  • var_export() avec l'option true pour retourner lu contenu d'un tableau dans une chaîne de caractères (sans l'option true, le tableau est affiché un peu comme var_dump())
  • get_class() pour déterminer à quelle classe un objet appartient