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::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; }
/** * Dump information about variables, accepts any number of parameters, supports modifiers: * * clean up any output before kint and place the dump at the top of page: * - Kint::dump() * ***** * expand all nodes on display: * ! Kint::dump() * ***** * dump variables disregarding their depth: * + Kint::dump() * ***** * return output instead of displaying it: * @ Kint::dump() * ***** * force output as plain text * ~ Kint::dump() * * Modifiers are supported by all dump wrapper functions, including Kint::trace(). Space is optional. * * * You can also use the following shorthand to display debug_backtrace(): * Kint::dump( 1 ); * * Passing the result from debug_backtrace() to kint::dump() as a single parameter will display it as trace too: * $trace = debug_backtrace( true ); * Kint::dump( $trace ); * Or simply: * Kint::dump( debug_backtrace() ); * * * @param mixed $data * * @return void|string */ 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(); # 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; $firstRunOldValue = self::$_firstRun; 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::MODE_CLI : self::MODE_RICH; } self::enabled($mode); /** @var Kint_Decorators_Rich|Kint_Decorators_Plain $decorator */ $decorator = self::enabled() === self::MODE_RICH ? 'Kint_Decorators_Rich' : 'Kint_Decorators_Plain'; $output = ''; if (self::$_firstRun) { $output .= $decorator::init(); } $trace = false; if ($names === array(null) && func_num_args() === 1 && $data === 1) { $trace = debug_backtrace(true); # Kint::dump(1) shorthand } 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 .= $decorator::wrapStart(); if ($trace) { $output .= $decorator::decorateTrace($trace); } else { $data = func_num_args() === 0 ? array("[[no arguments passed]]") : func_get_args(); foreach ($data as $k => $argument) { kintParser::reset(); $output .= $decorator::decorate(kintParser::factory($argument, $names[$k])); } } $output .= $decorator::wrapEnd($callee, $miniTrace, $previousCaller); self::enabled($modeOldValue); if (strpos($modifiers, '~') === false) { 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 ''; }