public static function dump($data = null)
{
if (!self::enabled()) {
return '';
}
list($names, $modifiers, $callee, $previousCaller, $miniTrace) = self::_getCalleeInfo(defined('DEBUG_BACKTRACE_IGNORE_ARGS') ? debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS) : debug_backtrace());
$modeOldValue = self::enabled();
$firstRunOldValue = self::$_firstRun;
# process modifiers: @, +, !, ~ and -
if (strpos($modifiers, '-') !== false) {
self::$_firstRun = true;
while (ob_get_level()) {
ob_end_clean();
}
}
if (strpos($modifiers, '!') !== false) {
$expandedByDefaultOldValue = self::$expandedByDefault;
self::$expandedByDefault = true;
}
if (strpos($modifiers, '+') !== false) {
$maxLevelsOldValue = self::$maxLevels;
self::$maxLevels = false;
}
if (strpos($modifiers, '@') !== false) {
$returnOldValue = self::$returnOutput;
self::$returnOutput = true;
self::$_firstRun = true;
}
if (strpos($modifiers, '~') !== false) {
self::enabled(self::MODE_WHITESPACE);
}
# set mode for current run
$mode = self::enabled();
if ($mode === true) {
$mode = PHP_SAPI === 'cli' && self::$cliDetection === true ? self::MODE_CLI : self::MODE_RICH;
}
self::enabled($mode);
$decorator = self::enabled() === self::MODE_RICH ? 'Kint_Decorators_Rich' : 'Kint_Decorators_Plain';
$output = '';
if (self::$_firstRun) {
$output .= call_user_func(array($decorator, 'init'));
}
$trace = false;
if ($names === array(null) && func_num_args() === 1 && $data === 1) {
# Kint::dump(1) shorthand
$trace = KINT_PHP53 ? debug_backtrace(true) : debug_backtrace();
} elseif (func_num_args() === 1 && is_array($data)) {
$trace = $data;
# test if the single parameter is result of debug_backtrace()
}
$trace and $trace = self::_parseTrace($trace);
$output .= call_user_func(array($decorator, 'wrapStart'));
if ($trace) {
$output .= call_user_func(array($decorator, 'decorateTrace'), $trace);
} else {
$data = func_num_args() === 0 ? array("[[no arguments passed]]") : func_get_args();
foreach ($data as $k => $argument) {
kintParser::reset();
# when the dump arguments take long to generate output, user might have changed the file and
# Kint might not parse the arguments correctly, so check if names are set and while the
# displayed names might be wrong, at least don't throw an error
$output .= call_user_func(array($decorator, 'decorate'), kintParser::factory($argument, isset($names[$k]) ? $names[$k] : ''));
}
}
$output .= call_user_func(array($decorator, 'wrapEnd'), $callee, $miniTrace, $previousCaller);
self::enabled($modeOldValue);
self::$_firstRun = false;
if (strpos($modifiers, '~') !== false) {
self::$_firstRun = $firstRunOldValue;
} else {
self::enabled($modeOldValue);
}
if (strpos($modifiers, '!') !== false) {
self::$expandedByDefault = $expandedByDefaultOldValue;
}
if (strpos($modifiers, '+') !== false) {
self::$maxLevels = $maxLevelsOldValue;
}
if (strpos($modifiers, '@') !== false) {
self::$returnOutput = $returnOldValue;
self::$_firstRun = $firstRunOldValue;
return $output;
}
if (self::$returnOutput) {
return $output;
}
echo $output;
return '';
}