Files
DomFramework/src/Backtrace.php
2022-11-25 21:21:30 +01:00

65 lines
2.1 KiB
PHP

<?php
/** DomFramework
* @package domframework
* @author Dominique Fournier <dominique@fournier38.fr>
* @license BSD
*/
namespace Domframework;
/** Display the backtrace in HTML with clicks to display the content
*/
class Backtrace
{
/** Display the backtrace in the browser
* use: \backtrace::show (debug_backtrace ());
* @param array $backtrace The backtrace to display
*/
public static function show($backtrace)
{
if (! is_array($backtrace)) {
throw new \Exception("Backtrace invalid: not an array", 500);
}
echo "<pre>Debug BackTrace:\n";
foreach ($backtrace as $key => $back) {
echo "<span onclick=\"document.getElementById('backtrace_$key')." .
"classList.toggle('hidden');\" style='cursor: pointer;'>";
echo "$key => ";
if (array_key_exists("file", $back)) {
echo $back["file"] . "[" . $back["line"] . "] : ";
}
if (array_key_exists("class", $back)) {
echo $back["class"];
}
echo "::" . $back["function"] . "(";
if (array_key_exists("args", $back)) {
foreach ($back["args"] as $k => $arg) {
if ($k > 0) {
echo ", ";
}
if (is_array($arg)) {
echo "ARRAY";
} elseif (is_object($arg)) {
echo "OBJECT " . get_class($arg);
} elseif (is_bool($arg)) {
echo ($arg === true) ? "true" : "false";
} elseif (is_string($arg)) {
echo "\"$arg\"";
} elseif (is_int($arg) || is_float($arg)) {
echo $arg;
} else {
var_dump($arg);
}
}
}
echo ")";
echo "</span>";
echo "<div id='backtrace_$key' class='hidden'>";
print_r($back);
echo "</div>\n";
}
echo "</pre>\n";
}
}