Hallo,
ich möchte das Tutorial gern um einige hilfreiche Skripte erweitern und dazu meine kleine Klasse "Debug" vorstellen.
Ich verwende sie täglich beim Coden (blöder Werbespruch, aber ist einfach so). Was mir bei normalen echo/print Ausgaben zu Debug-Zwecken immer gefehlt hat, war
a.) ein extra "exit", der das Skript beendet hat
b.) eine Typ-genaue Ausgabe, also (bool)false oder (int)1 o.ä.
c.) woher das echo-Debug aufgerufen wurde
Ich habe versucht, diese 3 Eigenschaften in meine Klasse einzubauen und es ist zu meiner Zufriedenheit gelungen. War ja auch nicht schwer
Ein
war eben nicht so schnell hingeschrieben, wie
Zur Verfügung stehen die statischen Methoden write() und stop().
Ihnen können beliebig viele Parameter beliebiger Variablen-Typen übergeben werden. Sie unterscheiden sich lediglich darin, dass stop() das Skript beim Aufruf abbricht (exit).
Eine Debug-Ausgabe könnte also so aussehen:
Der Abschnitt DEBUG BACKTRACE gibt -den Aufruf rückverfolgend- zusätzlich noch die verursachenden Code-Zeilen an.
Die Ausgabe erfolgt über die private statische Methode output().
Hier könnte also eine Debug-Konstante eingefügt werden und während dem Live-Modus Debug-Ausgaben unterbinden.
Hier die Klasse (PHP4 und PHP5 tauglich):
ich möchte das Tutorial gern um einige hilfreiche Skripte erweitern und dazu meine kleine Klasse "Debug" vorstellen.
Ich verwende sie täglich beim Coden (blöder Werbespruch, aber ist einfach so). Was mir bei normalen echo/print Ausgaben zu Debug-Zwecken immer gefehlt hat, war
a.) ein extra "exit", der das Skript beendet hat
b.) eine Typ-genaue Ausgabe, also (bool)false oder (int)1 o.ä.
c.) woher das echo-Debug aufgerufen wurde
Ich habe versucht, diese 3 Eigenschaften in meine Klasse einzubauen und es ist zu meiner Zufriedenheit gelungen. War ja auch nicht schwer
Ein
PHP-Code:
<?php
echo '<pre>', print_r($aArray, true), '</pre>'; exit;
?>
PHP-Code:
<?php
Debug::stop($aArray);
?>
Ihnen können beliebig viele Parameter beliebiger Variablen-Typen übergeben werden. Sie unterscheiden sich lediglich darin, dass stop() das Skript beim Aufruf abbricht (exit).
Eine Debug-Ausgabe könnte also so aussehen:
Code:
DEBUG ARG-0 string(7) "install" DEBUG ARG-1 string(12) "#^[\w\d_]+$#" DEBUG BACKTRACE Array ( [0] => J:\Server\common\php5\classes\Validate.php:12 [1] => J:\Server\projects\local_newsletteradmin\htdocs\index.php:31 ) DEBUG MESSAGE script stopped
Die Ausgabe erfolgt über die private statische Methode output().
Hier könnte also eine Debug-Konstante eingefügt werden und während dem Live-Modus Debug-Ausgaben unterbinden.
Hier die Klasse (PHP4 und PHP5 tauglich):
PHP-Code:
<?php
////////////////////////////////////////////////////////////////////////////////////////////////////
class Debug
{
////////////////////////////////////////////////////////////////////////////////////////////////
// public static functions
/* public static */ function write()
{
$aArgv = func_get_args();
for ($i = 0, $iCount = count($aArgv); $i < $iCount; $i++) {
echo Debug::output($aArgv[$i], "ARG-$i");
}
echo Debug::backtrace();
}
/* public static */ function stop()
{
$aArgv = func_get_args();
for ($i = 0, $iCount = count($aArgv); $i < $iCount; $i++) {
echo Debug::output($aArgv[$i], "ARG-$i");
}
echo Debug::backtrace();
echo Debug::output('script stopped', 'MESSAGE', false);
exit;
}
////////////////////////////////////////////////////////////////////////////////////////////////
// private static functions
/* private static */ function output($mVariable, $sTitle = '', $bShowType = true)
{
if ($bShowType) {
ob_start();
var_dump($mVariable);
$sContents = ob_get_contents();
ob_end_clean();
} else {
$sContents = print_r($mVariable, true);
}
return sprintf("<pre>DEBUG %s\n%s\n</pre>", strtoupper($sTitle), $sContents);
}
/* private static */ function backtrace()
{
$aBacktrace = debug_backtrace();
$aReturn = array();
for ($i = 1, $iCount = count($aBacktrace); $i < $iCount; $i++) {
$aReturn[] = sprintf('%s:%u', $aBacktrace[$i]['file'], $aBacktrace[$i]['line']);
}
if (count($aReturn) == 0) {
return '';
}
return Debug::output($aReturn, "BACKTRACE", false);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////
?>
Kommentar