php-yaoi/php-yaoi

View on GitHub
src/Debug.php

Summary

Maintainability
C
7 hrs
Test Coverage
<?php

namespace Yaoi;
class Debug
{
    const TRACE_HTML = 'html';
    const TRACE_FILE = 'file';
    const TRACE_TEXT = 'text';

    const LOG = 'debug';

    public static $errorLevels = array(
        E_ERROR => 'error',
        E_WARNING => 'warning',
        E_PARSE => 'parse',
        E_NOTICE => 'notice',
        E_CORE_ERROR => 'core-error',
        E_CORE_WARNING => 'core-warning',
        E_COMPILE_ERROR => 'compile-error',
        E_COMPILE_WARNING => 'compile-warning',
        E_USER_ERROR => 'user-error',
        E_USER_WARNING => 'user-warning',
        E_USER_NOTICE => 'user-notice',
        E_STRICT => 'strict',
        E_RECOVERABLE_ERROR => 'recoverable-error',
        E_DEPRECATED => 'deprecated',
        E_USER_DEPRECATED => 'user-deprecated',
        E_ALL => 'all',
    );


    public static $isActive = false;

    public static function backTrace($skip = 0, $return = self::TRACE_HTML)
    {
        //if (!self::$isActive) {
//            return '';
//        }

        $trace = debug_backtrace();
        $result = array(
            self::TRACE_HTML => '',
            self::TRACE_TEXT => '',
            self::TRACE_FILE => '',
        );

        for ($i = $skip; $i < count($trace); $i++) {
            $t = $trace[$i];
            if (isset($t['class'])) {
                $t['function'] = $t['class'] . $t['type'] . $t['function'];
            }
            if (!isset($t['file'])) {
                $t['file'] = '';
            }
            if (!isset($t['line'])) {
                $t['line'] = '';
            }
            $ta = array();
            if (!isset($t['args'])) {
                $t['args'] = array();
            }
            foreach ($t['args'] as $a) {
                if (is_object($a)) {
                    $ta[] = substr(str_replace(array("\n", "\r"), array(''), print_r($a, 1)), 0, 250);
                } elseif (is_array($a)) {
                    $ta[] = substr(str_replace(array("\n", "\r"), array(''), print_r($a, 1)), 0, 250);
                } else {
                    $ta[] = $a;
                }
            }

            $t['file'] = str_replace($_SERVER['DOCUMENT_ROOT'], '.', $t['file']);

            $result[self::TRACE_TEXT] .= "$t[function]('" . implode("','", $ta) . "') @ $t[file]:$t[line],\n";
            $result[self::TRACE_HTML] .= "<span title=\"$t[file]:$t[line]\">$t[function]('" . implode("','", $ta) . "')</span>,<br />";
            $result[self::TRACE_FILE] .= "$t[function]@$t[file]:$t[line],";
        }

        $result[self::TRACE_HTML] = "<a href=\"#\" onclick=\"this.nextSibling.style.display='block';this.style.display='none';return false\">...</a><div style=\"display:none\">" .
            $result[self::TRACE_HTML] . '</div>';
        return $return ? $result[$return] : $result;
    }


    public static function varBrief($var) {
        if (is_object($var)) {
            return get_class($var) . ' #'. spl_object_hash($var);
        }
        if (is_array($var)) {
            return 'Array(' . substr(implode(',', array_keys($var)), 0, 100) . ')';
        }
        if (is_bool($var)) {
            return $var ? 'bool(true)' : 'bool(false)';
        }
        if (null === $var) {
            return 'NULL';
        }
        if (is_string($var)) {
            return '"' . $var . '"';
        }
        if (is_resource($var)) {
            return 'Resource #' . (int)$var;
        }
        return $var;
    }

}