1: <?php
2: // declare(encoding='UTF-8');
3: /**
4: * Classe fournissant des fonctions de débogage équivalante à var_dump et print_r.
5: * L'affichage et l'utilisation de ces fonctions sont améliorés via cette classe.
6: * Cette classe est inspirée de la classe Zend_Debug.
7: *
8: * @category PHP 5.2
9: * @package Framework
10: * @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
11: * @copyright Copyright (c) 2009, Tela Botanica (accueil@tela-botanica.org)
12: * @license GNU-GPL-v3 <http://www.gnu.org/licenses/gpl.html>
13: * @license CECILL-v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt>
14: */
15: class Debug {
16:
17: const MODE_ECHO = 'echo';
18: const MODE_NOTICE = 'e_user_notice';
19:
20: /**
21: * mode de php (cli ou sapi)
22: */
23: protected static $mode = null;
24:
25: /**
26: * Accesseur pour le mode
27: * @return string le mode de php
28: */
29: public static function getMode() {
30: if (self::$mode === null) {
31: self::$mode = PHP_SAPI;
32: }
33: return self::$mode;
34: }
35:
36: /**
37: * Equivalent de var_dump
38: * @param mixed $variable la variable à dumper
39: * @param string $mot_cle le mot cle à associer à la variable
40: * @param boolean $echo si true on affiche le résultat, si false on ne renvoie que la chaine sans l'afficher
41: * @return string la chaine à afficher representant le dump ou null si echo
42: */
43: public static function dump($variable, $mot_cle = null, $echo = false) {
44: // var_dump de la variable dans un buffer et récupération de la sortie
45: ob_start();
46: var_dump($variable);
47: $sortie = ob_get_clean();
48:
49: // Pré-traitement de la sortie
50: $sortie = preg_replace("/\]\=\>\n(\s+)/m", "] => ", $sortie);
51:
52: // Traitement général du débogage
53: return self::traiterDebogage($mot_cle, $sortie, $echo);
54: }
55:
56: /**
57: * Equivalent de print_r.
58: * @param mixed $variable la variable à afficher
59: * @param string $mot_cle le mot cle à associer
60: * @param boolean $echo faire un echo ou non
61: * @return string la chaine contenant la variable printée ou null si echo
62: */
63: public static function printr($variable, $mot_cle = null, $echo = false) {
64: // Récupération de la sortie
65: $sortie = print_r($variable, true);
66:
67: // Traitement général du débogage
68: return self::traiterDebogage($mot_cle, $sortie, $echo);
69: }
70:
71: /**
72: * Traite une chaine de débogage et les mots clés associés
73: * @param string $mot_cle le mot à associer à la chaine
74: * @param string $sortie le chaine de debogage
75: * @param boolean $echo faire un echo du resultat ou non
76: * @return string la chaine de debogage formatée ou bien null si echo
77: */
78: private static function traiterDebogage($mot_cle, $sortie, $echo) {
79: // Formate le mot-clé
80: $mot_cle = self::formaterMotCle($mot_cle);
81:
82: // Traitement de la sortie
83: $sortie = self::traiterSortieSuivantMode($mot_cle, $sortie);
84:
85: // Affichage et/ou retour
86: self::verifierParametresConfig();
87: if (Config::get('fw_debogage') == true) {
88: if ($echo === true || Config::get('fw_debogage_mode') == self::MODE_ECHO) {
89: echo $sortie;
90: return null;
91: } else if (Config::get('fw_debogage_mode') == self::MODE_NOTICE) {
92: trigger_error($sortie, E_USER_NOTICE);
93: return null;
94: } else {
95: return $sortie;
96: }
97: }
98: }
99:
100: /**
101: * formate un mot clé donné
102: * @param string $mot_cle le mot clé à formaté
103: * @return string le mot clé formaté ou bien un chaine vide le mot clé est null ou vide
104: */
105: private static function formaterMotCle($mot_cle) {
106: return ($mot_cle === null) ? '' : rtrim($mot_cle).' ';
107: }
108:
109: /**
110: * traite la sortie de la chaine de débogage suivant le mode de php
111: * @param string $mot_cle le mot clé associé à la chaine
112: * @param string $sortie la chaine de débogage
113: * @return string la sortie formatée pour le mode en cours
114: */
115: private static function traiterSortieSuivantMode($mot_cle, $sortie) {
116: $corps = $mot_cle.PHP_EOL.$sortie;
117: if (self::getMode() == 'cli') {
118: $sortie = PHP_EOL.$corps.PHP_EOL;
119: } else {
120: $sortie = '<pre>'.$corps.'</pre>';
121: }
122: return $sortie;
123: }
124:
125: /**
126: * Vérifie que tous les paramêtres de config nécessaires au fonctionnement de cette classe existe dans les fichiers
127: * de configurations.
128: */
129: private static function verifierParametresConfig() {
130: $ok = true;
131: $parametres = array('fw_debogage', 'fw_debogage_mode');
132: foreach ($parametres as $param) {
133: if (is_null(Config::get($param))) {
134: $classe = get_class();
135: $m = "L'utilisation de la classe $classe nécessite de définir '$param' dans un fichier de configuration.";
136: trigger_error($m, E_USER_WARNING);
137: $ok = false;
138: }
139: }
140: return $ok;
141: }
142: }
143: ?>