/** * Dump information about a variable * * @param mixed $data,... * @access public * @static */ public static function dump($data, $capture = false) { // If we're capturing call dump() with just data and capture the output if ($capture === DUMPER_CAPTURE) { ob_start(); Dumper::dump($data); $str = ob_get_clean(); return $str; } $clearObjectRecursionProtection = false; if (self::$objectRecursionProtection === NULL) { self::$objectRecursionProtection = array(); $clearObjectRecursionProtection = true; } // disabled if (!Dumper::_debug()) { return false; } // more arguments if (func_num_args() > 1) { $_ = func_get_args(); foreach ($_ as $d) { Dumper::dump($d); } return; } // find caller $_ = debug_backtrace(); while ($d = array_pop($_)) { $callback = self::$lineNumberTestCallback; $function = strToLower($d['function']); if (in_array($function, array("krumo", "k", "kd")) || strToLower(@$d['class']) == 'krumo' || is_callable($callback) && $callback($d)) { break; } } $showVersion = Dumper::_config('display', 'show_version', TRUE); $showCallInfo = Dumper::_config('display', 'show_call_info', TRUE); $krumoUrl = 'https://github.com/oodle/krumo'; ////////////////////// // Start HTML header// ////////////////////// print "<div class=\"dumper-root\">\n"; print "\t<ul class=\"dumper-node dumper-first\">\n"; // The actual item itself print Dumper::_dump($data); if ($showVersion || $showCallInfo) { print "\t\t<li class=\"dumper-footnote\" onDblClick=\"toggle_expand_all();\">\n"; if ($showCallInfo && isset($d['file']) && $d['file']) { print "<span class=\"dumper-call\" style=\"white-space:nowrap;\">"; print "Called from <strong><code>" . $d['file'] . "</code></strong>, "; print "line <strong><code>" . $d['line'] . "</code></strong></span>"; } if ($showVersion) { $version = Dumper::version(); print "<span class=\"dumper-version\" style=\"white-space:nowrap;\">\n"; print "<strong class=\"dumper-version-number\">Krumo version {$version}</strong> | <a href=\"{$krumoUrl}\" target=\"_blank\">{$krumoUrl}</a>\n"; print "</span>\n"; } print "</li>"; } print "</ul></div>\n"; print "<!-- Dumper - HTML -->\n\n"; // Output the CSS and JavaScript AFTER the HTML Dumper::_css(); //////////////////// // End HTML header// //////////////////// // flee the hive $_recursion_marker = Dumper::_marker(); if ($hive =& Dumper::_hive($dummy)) { foreach ($hive as $i => $bee) { if (is_object($bee)) { if (($hash = spl_object_hash($bee)) && isset(self::$objectRecursionProtection[$hash])) { unset(self::$objectRecursionProtection[$hash]); } } elseif (isset($hive[$i]->{$_recursion_marker})) { unset($hive[$i][$_recursion_marker]); } } } if ($clearObjectRecursionProtection) { self::$objectRecursionProtection = NULL; } // End of dump() }