Yosko.net

[Snippet #04 - PHP] EasyDump, affichage de variable amélioré

Rédigé par Yosko - 10 septembre 2013 - 10 commentaires

Hier, Bronco nous faisait découvrir Kint, un outil pour PHP de deboguage et d'affichage de variables assez poussé.

Je n'avais pas vraiment envie d'installer tout une librairie dans mes projets pour remplacer ma fonction de debug, mais cela m'a donné quelques idées d'améliorations.

EasyDump revoit donc complètement l'affichage de variable qu'on fait habituellement avec notre cher var_dump.

Fonctionnalités

Avantages et fonctionnalités :

  • <pre> : l'affichage est automatiquement encadré d'un <pre> pour que vous n'ayez pas à le faire.
  • Affichage compact : réduit sensiblement l'espace pris comparé à var_dump
  • Mise en forme : un peu de couleurs pour y retrouver ses petits (cette version s'inspire de mon très cher Earthsong, encore !)
  • Htmlentities : les variables qui contiennent du code html/xml ne seront pas interprétées, mais bien affichées textuellement
  • Noms courts : des noms de variables très courts sont disponibles pour faciliter la saisie (inspirés là encore de Kint dans sa version lite)
  • Multi dump : Comme pour var_dump et Kint, vous pouvez passer plusieurs variables en même temps à EasyDump.

Axes d'amélioration :

  • Nom des variables : contrairement à Kint (mais comme var_dump), EasyDump n'est pas capable d'afficher le nom des variables que vous lui transmettez. C'est très compliqué à faire, mais serait bien utile lorsqu'on enchaine les dumps...
  • Paramétrer les couleurs : pour que chacun puisse personnaliser le bousin en fonction des besoins/envies.
  • Type "objects" : Les variables de type "objects" sont actuellement affichées via un var_dump, et je ne sais pas trop comment faire autrement.

Utilisation

  1. Téléchargez le code ici (ou sur Github pour la dernière version) et placez le dans le dossier de votre projet.
  2. Importez le fichier d'EasyDump :
    require_once( 'easydump.php');
    

    Puis appelez simplement les fonctions d'affichage :

    $var1 = "toto";
    $var2 = array(
        'titi' => 'tonton',
        'tata' => 'toutou',
    );
    EasyDump::debug($var1, $var2, 756);
    
    //immediatly stop the script after the dump:
    EasyDump::debugExit($var1, $var2, 756);
    
  3. Pour simplifier la saisie, des noms de variables très courts sont possibles (si vous n'utilisez pas déjà ces noms dans votre code) :
    d($var1, $var2, 756);    //same as EasyDump::debug()
    de($var1, $var2, 756);   //same as EasyDump::debugExit()
    

Et voilà le résultat :

Et maintenant ?

J'améliorerai au fil du temps en fonction de vos remarques et mes besoins. Peut-être même que je mettrai ça sur Github, un de ces 4...

Keep dumping & rock on, baby!

Edit 11/09/2013 à 14h : petite correction sur l'affichage des booléens (affichage de "true" et "false" au lieu de "1" ou rien du tout). Le lien de téléchargement a été mis à jour.

Edit 16/09/2013 à 15h : prise en compte des ressources (opendir, fopen et autres...) et améliorations mineures. Publication sur Github.

10 commentaires

#1 mardi 10 septembre 2013 @ 17:41 Bronco a dit :

yeah Baby ^^
J'aime bien le côté stand alone du script et les versions raccourcies...
J'avais fait un truc un peu similaire il y a un moment mais c'était bien plus limité (une simple fonction http://www.warriordudimanche.net/article143/stop-hammertime)...
Je pense que je vais récupérer ta lib et l'utiliser à la place de ma fonction ^^
En tout cas, n'hésite pas la à mettre sur GitHub ... wink

#2 mardi 10 septembre 2013 @ 20:40 Yosko a dit :

@Bronco :
Moi c'était pareil. Jusqu'à ce matin, ma fonction s'arrêtait à ça :

function debug($var) { echo '<pre>'; var_dump($var); echo '</pre>'; }
Ca fait le job et ça a le mérite d'être simple big_smile

#3 lundi 16 septembre 2013 @ 18:22 Eric a dit :

J'utilise depuis plus de 5 ans l'excellent dBug http://dbug.ospinto.com/ pour tous mes projets.

En le modifiant très légèrement, je fais juste :
debug($var);
et ça m'affiche un objet complet,, avec des sections que l'on peut réduire.

Petite question : tu as un pb avec l'anglais pour appeler ça EasyDump ?

#4 lundi 16 septembre 2013 @ 20:04 H3 a dit :

Sympa tout plein !

Au passage, super le nouveau thème du blog, avec l’intégration de shaarli et tout et tout !

#5 mardi 17 septembre 2013 @ 10:30 Yosko a dit :

@Eric :
Je crois que je vois ce que tu veux dire, mais au final faut quand même avoir l'esprit mal tourné. wink
Bon maintenant que c'est fait je vais pas le changer (et puis en fait, ça me fait bien marrer...)

#6 mardi 17 septembre 2013 @ 17:49 jerrywham a dit :

J'ai également repris une méthode de debug d'un auteur inconnu et que JéromeJ avait améliorée. Vous pourrez la trouver sur github également (https://github.com/jerrywham/explain/blob/master/explain.php).

Par contre, on ne peut débuguer qu'une seule variable.

Pour afficher la variable appelée, il suffit de lire la ligne où l'on appelle la méthode (je vous laisse lire le code, c'est plus simple qu'une longue explication).

#7 mercredi 18 septembre 2013 @ 09:44 Yosko a dit :

@jerrywham :
Très intéressant, ça. C'est distribué sous une licence particulière ?

Je vois que vous avez réussi à ressortir le nom de la variable fournie. Je vais peut-être m'en inspirer, tiens.
Edit : la méthode est la même que celle que j'ai déjà vu ailleurs, et ne suffit pas à gérer : les valeurs fournies direct (sans passer par une variable) et les déclarations sur plusieurs lignes... enfin, j'imagine qu'on ne peut pas tout gérer en restant KISS...

Autre question : le choix d'envelopper le tout dans une déclaration html+body, c'est pour une raison particulière ?

#8 mercredi 18 septembre 2013 @ 12:30 jerrywham a dit :

Pour la licence, j'en ai pas choisi et je ne sais pas ce que l'auteur initial avait choisi. JéromeJ ne l'a pas précisé non plus, mais je ne pense pas qu'il soit opposé au partage. Si je devais en choisir une, j'opterai pour une licence adaptée au droit européen : la cecill. Mais en fait, je m'en temponne... big_smile

Pour les balises html+body, c'est quand j'appelle ed() généralement en début de script. C'est pas vraiment nécessaire.

Cela m'étonne que les valeurs fournies directement ne soient pas affichées car la regex devrait capter tous les caractères entre les parenthèses de l'appel de la fonction.
Par contre, en effet, la mutiligne n'est pas gérée. Mais en même temps, on débugue rarement une variable qui fait plusieurs lignes...

Il faut aussi que j'améliore l'ouverture et la fermeture du backtrace car s'il y a beaucoup de fichiers appelés, ça peut gêner la lisibilité. Le javascript que j'utilise est buggué et j'ai pas eu le temps de le corrigé.

Autrement, je n'ai pas eu l'occasion de te féliciter pour cette class classe tongue

#9 mercredi 18 septembre 2013 @ 15:30 Yosko a dit :

@jerrywham :
Merci bien. Et j'ai bien l'intention de l'améliorer un peu.

Pour html+body: ce n'est pas plus respectueux des standards d'avoir 2 html et 2 body que d'avoir du code avant le html. Et comme l'affichage (dans Firefox en tout cas) sembe identique dans les deux cas... Bref ça revient au même j'ai l'impression big_smile

Pour les valeurs : au temps pour moi, je suis allé un peu vite pour critiquer. Désolé.

J'ai finalement repris de zéro l'emploi du backtrace (j'avais fait un ou deux essais déjà). Je suis en train de faire joujou avec les regex pour arriver à extraire proprement des trucs bizarres passés en paramètres (comme un tableau déclaré directement dans dans l'appel de la fonction, ou carrément une fonction inline, un appel sur plusieurs lignes, etc...). En bref, j'essaie d'ignorer les espaces et retours à la lignes inutile, et puis surtout les virgules si elles sont entre parenthèses, crochets, accolades, guillements ou appostrophes.
Et bien je peux te dire que je galère grave xD

#10 mercredi 25 septembre 2013 @ 23:32 alatric a dit :

Perso j'utilise Krumo qui est clair et ne ma jamais déçus, mais il a pas l'air d'aimer le xml que je lui donne(simplexml_load_string) et votre code rend la lecture difficile

Écrire un commentaire

 Se rappeler de moi sur ce site

Capcha
Entrez le code de l'image :