class.krumo.php
File
-
krumo/
class.krumo.php
View source
<?php
/**
* Krumo: Structured information display solution
*
* Krumo is a debugging tool (PHP5 only), which displays structured information
* about any PHP variable. It is a nice replacement for print_r() or var_dump()
* which are used by a lot of PHP developers.
*
* @author Kaloyan K. Tsvetkov <kaloyan@kaloyan.info>
* @license http://opensource.org/licenses/lgpl-license.php GNU Lesser General Public License Version 2.1
*
* @package Krumo
*/
//////////////////////////////////////////////////////////////////////////////
/**
* backward compatibility: the DIR_SEP constant isn't used anymore
*/
if (!defined('DIR_SEP')) {
define('DIR_SEP', DIRECTORY_SEPARATOR);
}
/**
* backward compatibility: the PATH_SEPARATOR constant is availble since 4.3.0RC2
*/
if (!defined('PATH_SEPARATOR')) {
define('PATH_SEPARATOR', OS_WINDOWS ? ';' : ':');
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Set the KRUMO_DIR constant up with the absolute path to Krumo files. If it is
* not defined, include_path will be used. Set KRUMO_DIR only if any other module
* or application has not already set it up.
*/
if (!defined('KRUMO_DIR')) {
define('KRUMO_DIR', dirname(__FILE__) . DIRECTORY_SEPARATOR);
}
/**
* This constant sets the maximum strings of strings that will be shown
* as they are. Longer strings will be truncated with this length, and
* their `full form` will be shown in a child node.
*/
if (!defined('KRUMO_TRUNCATE_LENGTH')) {
define('KRUMO_TRUNCATE_LENGTH', 50);
}
//////////////////////////////////////////////////////////////////////////////
/**
* Krumo API
*
* This class stores the Krumo API for rendering and
* displaying the structured information it is reporting
*
* @package Krumo
*/
class krumo {
/**
* Return Krumo version
*
* @return string
* @access public
* @static
*/
public static function version() {
return '0.2.1a';
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Prints a debug backtrace
*
* @access public
* @static
*/
public static function backtrace() {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
// render it
//
return krumo::dump(debug_backtrace());
}
/**
* Prints a list of all currently declared classes.
*
* @access public
* @static
*/
public static function classes() {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
// render it
//
?>
<div class="krumo-title">
This is a list of all currently declared classes.
</div>
<?php
return krumo::dump(get_declared_classes());
}
/**
* Prints a list of all currently declared interfaces (PHP5 only).
*
* @access public
* @static
*/
public static function interfaces() {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
// render it
//
?>
<div class="krumo-title">
This is a list of all currently declared interfaces.
</div>
<?php
return krumo::dump(get_declared_interfaces());
}
/**
* Prints a list of all currently included (or required) files.
*
* @access public
* @static
*/
public static function includes() {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
// render it
//
?>
<div class="krumo-title">
This is a list of all currently included (or required) files.
</div>
<?php
return krumo::dump(get_included_files());
}
/**
* Prints a list of all currently declared functions.
*
* @access public
* @static
*/
public static function functions() {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
// render it
//
?>
<div class="krumo-title">
This is a list of all currently declared functions.
</div>
<?php
return krumo::dump(get_defined_functions());
}
/**
* Prints a list of all currently declared constants.
*
* @access public
* @static
*/
public static function defines() {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
// render it
//
?>
<div class="krumo-title">
This is a list of all currently declared constants (defines).
</div>
<?php
return krumo::dump(get_defined_constants());
}
/**
* Prints a list of all currently loaded PHP extensions.
*
* @access public
* @static
*/
public static function extensions() {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
// render it
//
?>
<div class="krumo-title">
This is a list of all currently loaded PHP extensions.
</div>
<?php
return krumo::dump(get_loaded_extensions());
}
/**
* Prints a list of all HTTP request headers.
*
* @access public
* @static
*/
public static function headers() {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
// render it
//
?>
<div class="krumo-title">
This is a list of all HTTP request headers.
</div>
<?php
return krumo::dump(getAllHeaders());
}
/**
* Prints a list of the configuration settings read from <i>php.ini</i>
*
* @access public
* @static
*/
public static function phpini() {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
if (!readable(get_cfg_var('cfg_file_path'))) {
return false;
}
// render it
//
?>
<div class="krumo-title">
This is a list of the configuration settings read from <code><b><?php
echo get_cfg_var('cfg_file_path');
?></b></code>.
</div>
<?php
return krumo::dump(parse_ini_file(get_cfg_var('cfg_file_path'), true));
}
/**
* Prints a list of all your configuration settings.
*
* @access public
* @static
*/
public static function conf() {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
// render it
//
?>
<div class="krumo-title">
This is a list of all your configuration settings.
</div>
<?php
return krumo::dump(ini_get_all());
}
/**
* Prints a list of the specified directories under your <i>include_path</i> option.
*
* @access public
* @static
*/
public static function path() {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
// render it
//
?>
<div class="krumo-title">
This is a list of the specified directories under your <code><b>include_path</b></code> option.
</div>
<?php
return krumo::dump(explode(PATH_SEPARATOR, ini_get('include_path')));
}
/**
* Prints a list of all the values from the <i>$_REQUEST</i> array.
*
* @access public
* @static
*/
public static function request() {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
// render it
//
?>
<div class="krumo-title">
This is a list of all the values from the <code><b>$_REQUEST</b></code> array.
</div>
<?php
return krumo::dump($_REQUEST);
}
/**
* Prints a list of all the values from the <i>$_GET</i> array.
*
* @access public
* @static
*/
public static function get() {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
// render it
//
?>
<div class="krumo-title">
This is a list of all the values from the <code><b>$_GET</b></code> array.
</div>
<?php
return krumo::dump($_GET);
}
/**
* Prints a list of all the values from the <i>$_POST</i> array.
*
* @access public
* @static
*/
public static function post() {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
// render it
//
?>
<div class="krumo-title">
This is a list of all the values from the <code><b>$_POST</b></code> array.
</div>
<?php
return krumo::dump($_POST);
}
/**
* Prints a list of all the values from the <i>$_SERVER</i> array.
*
* @access public
* @static
*/
public static function server() {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
// render it
//
?>
<div class="krumo-title">
This is a list of all the values from the <code><b>$_SERVER</b></code> array.
</div>
<?php
return krumo::dump($_SERVER);
}
/**
* Prints a list of all the values from the <i>$_COOKIE</i> array.
*
* @access public
* @static
*/
public static function cookie() {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
// render it
//
?>
<div class="krumo-title">
This is a list of all the values from the <code><b>$_COOKIE</b></code> array.
</div>
<?php
return krumo::dump($_COOKIE);
}
/**
* Prints a list of all the values from the <i>$_ENV</i> array.
*
* @access public
* @static
*/
public static function env() {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
// render it
//
?>
<div class="krumo-title">
This is a list of all the values from the <code><b>$_ENV</b></code> array.
</div>
<?php
return krumo::dump($_ENV);
}
/**
* Prints a list of all the values from the <i>$_SESSION</i> array.
*
* @access public
* @static
*/
public static function session() {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
// render it
//
?>
<div class="krumo-title">
This is a list of all the values from the <code><b>$_SESSION</b></code> array.
</div>
<?php
return krumo::dump($_SESSION);
}
/**
* Prints a list of all the values from an INI file.
*
* @param string $ini_file
*
* @access public
* @static
*/
public static function ini($ini_file) {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
// read it
//
if (!($_ = @parse_ini_file($ini_file, 1))) {
return false;
}
// render it
//
?>
<div class="krumo-title">
This is a list of all the values from the <code><b><?php
echo realpath($ini_file) ? realpath($ini_file) : $ini_file;
?></b></code> INI file.
</div>
<?php
return krumo::dump($_);
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Dump information about a variable
*
* @param mixed $data,...
* @access public
* @static
*/
public static function dump($data) {
// disabled ?
//
if (!krumo::_debug()) {
return false;
}
// more arguments ?
//
if (func_num_args() > 1) {
$_ = func_get_args();
foreach ($_ as $d) {
krumo::dump($d);
}
return;
}
// the css ?
//
krumo::_css();
// find caller
// DEVEL: we added array_reverse() so the proper file+line number is found.
$_ = array_reverse(debug_backtrace());
while ($d = array_pop($_)) {
// DEVEL: changed if() condition below
if (strpos(@$d['file'], 'devel') === FALSE && strpos(@$d['file'], 'krumo') === FALSE && @$d['class'] != 'krumo') {
break;
}
}
// the content
// DEVEL: we add an ltr here.
?>
<div class="krumo-root" dir="ltr">
<ul class="krumo-node krumo-first">
<?php
echo krumo::_dump($data);
?>
<li class="krumo-footnote">
<div class="krumo-version" style="white-space:nowrap;">
<h6>Krumo version <?php
echo krumo::version();
?></h6> | <a
href="http://krumo.sourceforge.net"
target="_blank">http://krumo.sourceforge.net</a>
</div>
<?php
if (@$d['file']) {
?>
<span class="krumo-call" style="white-space:nowrap;">
Called from <code><?php
echo $d['file'];
?></code>,
line <code><?php
echo $d['line'];
?></code></span>
<?php
}
?>
</li>
</ul>
</div>
<?php
// flee the hive
//
$_recursion_marker = krumo::_marker();
if ($hive =& krumo::_hive($dummy)) {
foreach ($hive as $i => $bee) {
// skip closures set as properties
if (is_object($bee) && !$bee instanceof Closure) {
unset($hive[$i]->{$_recursion_marker});
// DEVEL: changed 'else' to 'elseif' below
}
elseif (is_array($bee)) {
unset($hive[$i][$_recursion_marker]);
}
}
}
// PHP 4.x.x array reference bug...
//
if (is_array($data) && version_compare(PHP_VERSION, "5", "<")) {
unset($GLOBALS[krumo::_marker()]);
}
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Returns values from Krumo's configuration
*
* @param string $group
* @param string $name
* @param mixed $fallback
* @return mixed
*
* @access private
* @static
*/
private static function _config($group, $name, $fallback = null) {
static $_config = array();
// not loaded ?
//
if (empty($_config)) {
$_config = (array) @parse_ini_file(KRUMO_DIR . 'krumo.ini', true);
}
// exists ?
//
return isset($_config[$group][$name]) ? $_config[$group][$name] : $fallback;
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Allows CSS and Javascript to be included without performing a krumo::dump().
*/
public static function addCssJs() {
return krumo::_css();
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Print the skin (CSS)
*
* @return boolean
* @access private
* @static
*/
private static function _css() {
static $_css = false;
// already set ?
//
if ($_css) {
return true;
}
$css = '';
// DEVEL: changed for Drupal variables system
$skin = variable_get('devel_krumo_skin', 'default');
// custom selected skin ?
//
$_ = KRUMO_DIR . "skins/{$skin}/skin.css";
if ($fp = @fopen($_, 'r', 1)) {
$css = fread($fp, filesize($_));
fclose($fp);
}
// defautl skin ?
//
if (!$css && $skin != 'default') {
$skin = 'default';
$_ = KRUMO_DIR . "skins/default/skin.css";
$css = join('', @file($_));
}
// print ?
//
if ($_css = $css != '') {
// fix the urls
//
// DEVEL: changed for Drupal path system.
$css_url = file_create_url(drupal_get_path('module', 'devel') . "/krumo/skins/{$skin}/");
$css = preg_replace('~%url%~Uis', $css_url, $css);
// the CSS
//
drupal_add_css($css, 'inline');
drupal_add_js(join(file(KRUMO_DIR . "krumo.js")), 'inline');
}
return $_css;
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Enable Krumo
*
* @return boolean
* @access public
* @static
*/
public static function enable() {
return true === krumo::_debug(true);
}
/**
* Disable Krumo
*
* @return boolean
* @access public
* @static
*/
public static function disable() {
return false === krumo::_debug(false);
}
/**
* Get\Set Krumo state: whether it is enabled or disabled
*
* @param boolean $state
* @return boolean
* @access private
* @static
*/
private static function _debug($state = null) {
static $_ = true;
// set
//
if (isset($state)) {
$_ = (bool) $state;
}
// get
//
return $_;
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Dump information about a variable
*
* @param mixed $data
* @param string $name
* @access private
* @static
*/
private static function _dump(&$data, $name = '...') {
// object ?
//
if (is_object($data)) {
return krumo::_object($data, $name);
}
// array ?
//
if (is_array($data)) {
// PHP 4.x.x array reference bug...
//
if (version_compare(PHP_VERSION, "5", "<")) {
// prepare the GLOBAL reference list...
//
if (!isset($GLOBALS[krumo::_marker()])) {
$GLOBALS[krumo::_marker()] = array();
}
if (!is_array($GLOBALS[krumo::_marker()])) {
$GLOBALS[krumo::_marker()] = (array) $GLOBALS[krumo::_marker()];
}
// extract ?
//
if (!empty($GLOBALS[krumo::_marker()])) {
$d = array_shift($GLOBALS[krumo::_marker()]);
if (is_array($d)) {
$data = $d;
}
}
}
return krumo::_array($data, $name);
}
// resource ?
//
if (is_resource($data)) {
return krumo::_resource($data, $name);
}
// scalar ?
//
if (is_string($data)) {
return krumo::_string($data, $name);
}
if (is_float($data)) {
return krumo::_float($data, $name);
}
if (is_integer($data)) {
return krumo::_integer($data, $name);
}
if (is_bool($data)) {
return krumo::_boolean($data, $name);
}
// null ?
//
if (is_null($data)) {
return krumo::_null($name);
}
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Render a dump for a NULL value
*
* @param string $name
* @return string
* @access private
* @static
*/
private static function _null($name) {
?>
<li class="krumo-child">
<div class="krumo-element"
onMouseOver="krumo.over(this);"
onMouseOut="krumo.out(this);">
<?php
/* DEVEL: added htmlSpecialChars */
?>
<a class="krumo-name"><?php
echo htmlSpecialChars($name);
?></a>
(<em class="krumo-type krumo-null">NULL</em>)
</div>
</li>
<?php
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Return the marked used to stain arrays
* and objects in order to detect recursions
*
* @return string
* @access private
* @static
*/
private static function _marker() {
static $_recursion_marker;
if (!isset($_recursion_marker)) {
$_recursion_marker = uniqid('krumo');
}
return $_recursion_marker;
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Adds a variable to the hive of arrays and objects which
* are tracked for whether they have recursive entries
*
* @param mixed &$bee either array or object, not a scallar vale
* @return array all the bees
*
* @access private
* @static
*/
private static function &_hive(&$bee) {
static $_ = array();
// new bee ?
//
if (!is_null($bee)) {
// stain it
//
$_recursion_marker = krumo::_marker();
is_object($bee) ? empty($bee->{$_recursion_marker}) ? $bee->{$_recursion_marker} = 1 : $bee->{$_recursion_marker}++ : @$bee[$_recursion_marker]++;
$_[0][] =& $bee;
}
// return all bees
//
return $_[0];
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Render a dump for the properties of an array or objeect
*
* @param mixed &$data
* @access private
* @static
*/
private static function _vars(&$data) {
$_is_object = is_object($data);
// test for references in order to
// prevent endless recursion loops
//
$_recursion_marker = krumo::_marker();
$_r = $_is_object ? @$data->{$_recursion_marker} : @$data[$_recursion_marker];
$_r = (int) $_r;
// recursion detected
//
if ($_r > 0) {
return krumo::_recursion();
}
// stain it
//
krumo::_hive($data);
// render it
//
?>
<div class="krumo-nest" style="display:none;">
<ul class="krumo-node">
<?php
if ($_is_object && get_class($data) != 'stdClass') {
// this part for protected/private properties only
$refl = new ReflectionClass($data);
foreach ($refl->getProperties() as $property) {
$k = $property->getName();
if ($k === $_recursion_marker || $property->isPublic()) {
continue;
}
// add key indicators
if ($property->isProtected()) {
$k .= ':protected';
}
elseif ($property->isPrivate()) {
$k .= ':private';
}
$property->setAccessible(TRUE);
$v = $property->getValue($data);
krumo::_dump($v, $k);
}
}
// keys ?
//
$keys = $_is_object ? array_keys(get_object_vars($data)) : array_keys($data);
// itterate
//
foreach ($keys as $k) {
// skip marker
//
if ($k === $_recursion_marker) {
continue;
}
// get real value
//
if ($_is_object) {
$v =& $data->{$k};
}
else {
$v =& $data[$k];
}
krumo::_dump($v, $k);
}
?>
</ul>
</div>
<?php
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Render a block that detected recursion
*
* @access private
* @static
*/
private static function _recursion() {
?>
<div class="krumo-nest" style="display:none;">
<ul class="krumo-node">
<li class="krumo-child">
<div class="krumo-element"
onMouseOver="krumo.over(this);"
onMouseOut="krumo.out(this);">
<a class="krumo-name"><span class="krumo-big">∞</span></a>
(<em class="krumo-type">Recursion</em>)
</div>
</li>
</ul>
</div>
<?php
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Render a dump for an array
*
* @param mixed $data
* @param string $name
* @access private
* @static
*/
private static function _array(&$data, $name) {
?>
<li class="krumo-child">
<div class="krumo-element<?php
echo !empty($data) ? ' krumo-expand' : '';
?>">
<?php
/* DEVEL: added htmlSpecialChars */
?>
<a class="krumo-name"><?php
echo htmlSpecialChars($name);
?></a>
(<em class="krumo-type">Array, <strong class="krumo-array-length"><?php
echo count($data) == 1 ? "1 element" : count($data) . " elements";
?></strong></em>)
<?php
// callback ?
//
if (is_callable($data)) {
$_ = array_values($data);
?>
<span class="krumo-callback"> |
(<em class="krumo-type">Callback</em>)
<strong class="krumo-string"><?php
echo !is_object($_[0]) ? htmlSpecialChars($_[0]) : get_class($_[0]);
?>::<?php
echo !is_object($_[1]) ? htmlSpecialChars($_[1]) : get_class($_[1]);
?>();</strong></span>
<?php
}
?>
</div>
<?php
if (count($data)) {
krumo::_vars($data);
}
?>
</li>
<?php
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Render a dump for an object
*
* @param mixed $data
* @param string $name
* @access private
* @static
*/
private static function _object(&$data, $name) {
?>
<li class="krumo-child">
<div class="krumo-element<?php
echo ' krumo-expand';
?>">
<?php
/* DEVEL: added htmlSpecialChars */
?>
<a class="krumo-name"><?php
echo htmlSpecialChars($name);
?></a>
(<em class="krumo-type">Object</em>)
<strong class="krumo-class"><?php
echo get_class($data);
?></strong>
</div>
<?php
// Skip closures.
$closure_prototype = function () {
};
if ($data instanceof $closure_prototype) {
return;
}
krumo::_vars($data);
?>
</li>
<?php
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Render a dump for a resource
*
* @param mixed $data
* @param string $name
* @access private
* @static
*/
private static function _resource($data, $name) {
?>
<li class="krumo-child">
<div class="krumo-element"
onMouseOver="krumo.over(this);"
onMouseOut="krumo.out(this);">
<?php
/* DEVEL: added htmlSpecialChars */
?>
<a class="krumo-name"><?php
echo htmlSpecialChars($name);
?></a>
(<em class="krumo-type">Resource</em>)
<strong class="krumo-resource"><?php
echo get_resource_type($data);
?></strong>
</div>
</li>
<?php
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Render a dump for a boolean value
*
* @param mixed $data
* @param string $name
* @access private
* @static
*/
private static function _boolean($data, $name) {
?>
<li class="krumo-child">
<div class="krumo-element"
onMouseOver="krumo.over(this);"
onMouseOut="krumo.out(this);">
<?php
/* DEVEL: added htmlSpecialChars */
?>
<a class="krumo-name"><?php
echo htmlSpecialChars($name);
?></a>
(<em class="krumo-type">Boolean</em>)
<strong class="krumo-boolean"><?php
echo $data ? 'TRUE' : 'FALSE';
?></strong>
</div>
</li>
<?php
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Render a dump for a integer value
*
* @param mixed $data
* @param string $name
* @access private
* @static
*/
private static function _integer($data, $name) {
?>
<li class="krumo-child">
<div class="krumo-element"
onMouseOver="krumo.over(this);"
onMouseOut="krumo.out(this);">
<?php
/* DEVEL: added htmlSpecialChars */
?>
<a class="krumo-name"><?php
echo htmlSpecialChars($name);
?></a>
(<em class="krumo-type">Integer</em>)
<strong class="krumo-integer"><?php
echo $data;
?></strong>
</div>
</li>
<?php
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Render a dump for a float value
*
* @param mixed $data
* @param string $name
* @access private
* @static
*/
private static function _float($data, $name) {
?>
<li class="krumo-child">
<div class="krumo-element"
onMouseOver="krumo.over(this);"
onMouseOut="krumo.out(this);">
<?php
/* DEVEL: added htmlSpecialChars */
?>
<a class="krumo-name"><?php
echo htmlSpecialChars($name);
?></a>
(<em class="krumo-type">Float</em>)
<strong class="krumo-float"><?php
echo $data;
?></strong>
</div>
</li>
<?php
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
/**
* Render a dump for a string value
*
* @param mixed $data
* @param string $name
* @access private
* @static
*/
private static function _string($data, $name) {
// extra ?
//
$_extra = false;
$_ = $data;
if (strLen($data) > KRUMO_TRUNCATE_LENGTH) {
$_ = drupal_substr($data, 0, KRUMO_TRUNCATE_LENGTH - 3) . '...';
$_extra = true;
}
?>
<li class="krumo-child">
<div class="krumo-element<?php
echo $_extra ? ' krumo-expand' : '';
?>">
<?php
/* DEVEL: added htmlSpecialChars */
?>
<a class="krumo-name"><?php
echo htmlSpecialChars($name);
?></a>
(<em class="krumo-type">String,
<strong class="krumo-string-length"><?php
echo strlen($data);
?> characters</strong> </em>)
<strong class="krumo-string"><?php
echo htmlSpecialChars($_);
?></strong>
<?php
// callback ?
//
if (is_callable($data)) {
?>
<span class="krumo-callback"> |
(<em class="krumo-type">Callback</em>)
<strong class="krumo-string"><?php
echo htmlSpecialChars($_);
?>();</strong></span>
<?php
}
?>
</div>
<?php
if ($_extra) {
?>
<div class="krumo-nest" style="display:none;">
<ul class="krumo-node">
<li class="krumo-child">
<div class="krumo-preview"><?php
echo htmlSpecialChars($data);
?></div>
</li>
</ul>
</div>
<?php
}
?>
</li>
<?php
}
// -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
//--end-of-class--
}
//////////////////////////////////////////////////////////////////////////////
/**
* Alias of {@link krumo::dump()}
*
* @param mixed $data,...
*
* @see krumo::dump()
*/
function krumo() {
$_ = func_get_args();
return call_user_func_array(array(
'krumo',
'dump',
), $_);
}
//////////////////////////////////////////////////////////////////////////////
Functions
Title | Deprecated | Summary |
---|---|---|
krumo | Alias of {@link krumo::dump()} |
Classes
Title | Deprecated | Summary |
---|---|---|
krumo | Krumo API |