lut 08
Zend_Debug::dump() po swojemu
Pisząc programy w PHP często jest tak iż na szybko potrzebujemy wyrzucić na ekran wartość jakieś zmiennej. Zend_Debug daje bardzo dobre narzędzie ale ma jeden mały brak.
Zdarzało mi się przy wielu zastosowaniach Zend_Debug::dump() zapomnieć gdzie były one powstawiane. Moja modyfikacja wyświetla taką informację poza tym daje jeszcze kilka innych możliwości jak przerwanie pracy po wyświetleniu danych, 3 rodzaje prezentowanych informacji oraz zapisanie w logu tych danych.
/**
* Klasa debugująca
* @since 2010-01-28
* @version 1.1.0
*
*/
class Debug {
/**
* Wyświetla przekazaną wartość
*
* @param mixed $var
* @param boolean $exit Czy po wyświetleniu przerwać działanie?
* @param string $description Określa sposób wyświetlania opisu. Możliwe wartości short, medium, long.
* @param boolean $log Czy zapisywać w logach?
* @return void
*/
public static function dump($var, $exit = false, $description = 'short', $log = true) {
Zend_Loader::loadClass('Zend_Debug');
$debugBacktrace = debug_backtrace();
$message = '';
$message .= '<div style="text-align: left; background-color: #dfdfdf; font-family: Courier,monospace; font-size: 11px; font-style: normal; font-weight: normal; font-variant: normal; padding: 5px;">';
switch ($description) {
case 'short':
$message .= '<strong>'.$debugBacktrace[0]['file'].'</strong> w linii <strong>'.$debugBacktrace[0]['line'].'</strong>';
break;
case 'medium':
$message .= '<ol>';
foreach ($debugBacktrace as $i => $d) {
$message .= '<li>';
$message .= '<strong>'.$d['class'].$d['type'].$d['function'].'</strong>';
$message .= ' - w pliku <em>'.$d['file'].'</em> w linii <em>'.$d['line'].'</em>';
$message .= ' z '.count($d['args']).' argumentami.';
$message .= '</li>';
}
$message .= '</ol>';
break;
case 'long':
$message .= '<ol>';
foreach ($debugBacktrace as $i => $d) {
$message .= '<li>';
$message .= 'W pliku <em>'.$d['file'].'</em> w linii <em>'.$d['line'].'</em>';
$message .= ' wywołano <strong>'.$d['class'].$d['type'].$d['function'].'</strong>';
if(count($d['args']) != 0) $message .= '<ol>';
$message .= '(';
foreach ($d['args'] as $a) {
$message .= '<li>';
Zend_Debug::dump($a);
$message .= '</li>';
}
$message .= ').';
if(count($d['args']) != 0) $message .= '</ol>';
}
$message .= '</li></ol>';
break;
}
$message .= '<hr />';
$message .= Zend_Debug::dump($var, 'DUMP', false);
$message .= '';
echo $message;
if($log) {
Log::debug(strip_tags(str_replace(array('','',''), "\n", $message)));
}
if($exit) {
exit();
}
}
}

