/** * Dump implementation for JSON. * @param mixed variable to dump * @param int current recursion level * @return string */ private static function jsonDump(& $var, $level = 0) { if (is_bool($var) || is_null($var) || is_int($var) || is_float($var)) { return $var; } elseif (is_string($var)) { if (Debugger::$maxLen && strlen($var) > Debugger::$maxLen) { $var = substr($var, 0, Debugger::$maxLen) . " \xE2\x80\xA6 "; } return Helpers::fixEncoding($var); } elseif (is_array($var)) { static $marker; if ($marker === NULL) { $marker = uniqid("\x00", TRUE); } if (isset($var[$marker])) { return "\xE2\x80\xA6RECURSION\xE2\x80\xA6"; } elseif ($level < Debugger::$maxDepth || !Debugger::$maxDepth) { $var[$marker] = TRUE; $res = array(); foreach ($var as $k => & $v) { if ($k !== $marker) { $res[self::jsonDump($k)] = self::jsonDump($v, $level + 1); } } unset($var[$marker]); return $res; } else { return " \xE2\x80\xA6 "; } } elseif (is_object($var)) { $arr = (array) $var; static $list = array(); if (in_array($var, $list, TRUE)) { return "\xE2\x80\xA6RECURSION\xE2\x80\xA6"; } elseif ($level < Debugger::$maxDepth || !Debugger::$maxDepth) { $list[] = $var; $res = array("\x00" => '(object) ' . Helpers::getClass($var)); foreach ($arr as $k => & $v) { if ($k[0] === "\x00") { $k = substr($k, strrpos($k, "\x00") + 1); } $res[self::jsonDump($k)] = self::jsonDump($v, $level + 1); } array_pop($list); return $res; } else { return " \xE2\x80\xA6 "; } } elseif (is_resource($var)) { return 'resource ' . get_resource_type($var); } else { return 'unknown type'; } }