Afficher le contenu des variables
Tout développeur connaît la fonction var_dump, qui affiche des informations
détaillées sur une variable. Malheureusement, sa sortie n'a aucune mise en forme HTML et se fond en une seule ligne, sans parler
des problèmes d'échappement HTML. En pratique, il est nécessaire de remplacer var_dump par une fonction plus
commode. Cette fonction, c'est dump().
$arr = [10, 20.2, true, null, 'hello'];
dump($arr);
// ou Debugger::dump($arr);
produit la sortie :

Vous pouvez remplacer le thème clair par défaut par un thème sombre :
Debugger::$dumpTheme = 'dark';

Vous pouvez aussi changer la profondeur d'imbrication à l'aide de Debugger::$maxDepth, la longueur des chaînes affichées avec Debugger::$maxLength et le nombre d'éléments de tableau ou d'objet affichés avec Debugger::$maxItems. Naturellement, des valeurs plus basses accélèrent le rendu.
Debugger::$maxDepth = 2; // par défaut : 15
Debugger::$maxLength = 50; // par défaut : 150
Debugger::$maxItems = 50; // par défaut : 100
La fonction dump() peut aussi afficher l'endroit d'où elle a été appelée et, pour les objets, le chemin du
fichier où leur classe est définie. Cela se règle par la propriété Debugger::$showLocation :
Debugger::$showLocation = true; // affiche l'information sur l'emplacement
Debugger::$showLocation = false; // la masque
Pour un contrôle plus fin, appelez directement Tracy\Dumper::dump() et passez l'option
Dumper::LOCATION réglée sur Dumper::LOCATION_CLASS (seulement là où les classes sont définies) ou
Dumper::LOCATION_SOURCE (aussi l'endroit d'où dump() a été appelée).
Des alternatives pratiques à dump() sont dumpe() (dump & exit) et bdump(). Cette
dernière nous permet d'afficher les valeurs des variables dans un panneau de la Tracy Bar. C'est très pratique, car les dumps
sont séparés de la mise en page et nous pouvons en plus leur donner un titre.
bdump([2, 4, 6, 8], 'nombres pairs jusqu\'à dix');
bdump([1, 3, 5, 7, 9], 'nombres impairs jusqu\'à dix');

Utiliser Tracy\Dumper directement
Derrière dump() se cache la classe Tracy\Dumper, que vous pouvez aussi utiliser directement.
Contrairement à dump(), elle ne dépend pas de Debugger et tire tous ses réglages d'un tableau
d'options, ce qui la rend pratique pour les scripts autonomes, les outils CLI, ou dès que vous avez besoin du dump sous forme de
chaîne. Comme les réglages viennent du tableau et non de Debugger, les valeurs par défaut diffèrent légèrement
: la profondeur est de 7 au lieu de 15, par exemple.
Les méthodes renvoient le dump sous forme de chaîne :
use Tracy\Dumper;
$html = Dumper::toHtml($var, [Dumper::DEPTH => 3]); // HTML pour le navigateur
$text = Dumper::toText($var); // texte brut, par exemple pour un journal
$ansi = Dumper::toTerminal($var); // texte avec couleurs ANSI pour le terminal
Ou affichez la variable directement avec Dumper::dump(), qui choisit automatiquement la sortie HTML ou terminal
selon l'environnement :
Dumper::dump($var, [Dumper::DEPTH => 3]);
La sortie HTML a besoin d'une petite feuille de style et d'un script. Quand vous faites un dump en dehors d'une
application équipée de Tracy (c'est-à-dire sans Debugger::enable()), affichez-les une fois dans le head de la page
à l'aide de Dumper::renderAssets(). Dumper::dump() le fait toute seule, mais pas
toHtml().
Options
La sortie se règle par un tableau d'options passé à toutes les méthodes ci-dessus :
| Option | Description | Par défaut |
|---|---|---|
Dumper::DEPTH |
profondeur d'imbrication maximale | 7 |
Dumper::TRUNCATE |
longueur maximale des chaînes | 150 |
Dumper::ITEMS |
nombre maximal d'éléments affichés dans un tableau/objet | 100 |
Dumper::COLLAPSE |
replier le nœud racine ? true/false, ou le replier dès qu'il a au moins ce nombre
d'éléments |
14 |
Dumper::COLLAPSE_COUNT |
replier un nœud imbriqué dès qu'il a au moins ce nombre d'éléments | 7 |
Dumper::LOCATION |
afficher l'emplacement ; true/false, ou Dumper::LOCATION_CLASS (seulement là où les
classes sont définies) ou Dumper::LOCATION_SOURCE (aussi le lieu d'appel) |
désactivé |
Dumper::THEME |
thème de couleurs, light ou dark |
light |
Dumper::HASH |
afficher les identifiants d'objets (le marqueur #) et les références (le marqueur &) ? |
true |
Dumper::DEBUGINFO |
utiliser la méthode magique __debugInfo() de l'objet ? |
false |
Dumper::KEYS_TO_HIDE |
tableau des noms de clés dont les valeurs sont masquées par ***** |
[] |
Dumper::SCRUBBER |
callback fn(string $key, mixed $value, ?string $class): bool renvoyant true pour les valeurs
sensibles |
aucun |
Dumper::OBJECT_EXPORTERS |
rendu personnalisé des objets, voir plus bas | [] |
Les options COLLAPSE, COLLAPSE_COUNT et THEME ne s'appliquent qu'à la sortie HTML
interactive.
L'option SCRUBBER masque les valeurs sensibles du dump ; voir Scrubber personnalisé pour un exemple complet.
Par exemple, pour obtenir un dump compact sans les hachages des objets :
echo Dumper::toText($var, [Dumper::HASH => false]);
Les couleurs ANSI utilisées par toTerminal() peuvent être personnalisées via
Dumper::$terminalColors.
Rendu personnalisé des objets
Par défaut, le dumper rend un objet en énumérant ses propriétés. Ce n'est parfois pas la vue la plus utile : un
PhpToken, par exemple, affiche son type sous forme d'identifiant numérique au lieu d'un nom lisible. Vous pouvez
apprendre au dumper comment rendre une classe particulière en enregistrant un exporteur dans
Dumper::$objectExporters :
use Tracy\Dumper;
Dumper::$objectExporters[PhpToken::class] = function (PhpToken $token, Dumper\Value $value): void {
$value->value = $token->getTokenName() . ' ' . $token->text;
};
L'exporteur reçoit l'objet et un objet Tracy\Dumper\Value décrivant la façon dont il sera affiché. Affecter
une valeur à $value->value remplace l'en-tête (par défaut le nom de la classe) par votre propre texte, si bien
qu'au lieu d'une liste de propriétés vous obtenez une étiquette compacte et lisible. Le réglage s'applique à tout dump de
cette classe, même aux objets imbriqués dans des tableaux ou d'autres objets. Vous pouvez sinon passer des exporteurs pour un
seul appel via l'option Dumper::OBJECT_EXPORTERS de Tracy\Dumper::dump().