Krumo::_vars PHP Method

_vars() private static method

Render a dump for the properties of an array or objeect
private static _vars ( &$data )
    private static function _vars(&$data)
    {
        $_is_object = is_object($data);
        // test for references in order to
        // prevent endless recursion loops
        $_recursion_marker = static::_marker();
        if ($_is_object) {
            if (($hash = spl_object_hash($data)) && isset(static::$objectRecursionProtection[$hash])) {
                $_r = static::$objectRecursionProtection[$hash];
            } else {
                $_r = null;
            }
        } else {
            $_r = isset($data[$_recursion_marker]) ? $data[$_recursion_marker] : null;
        }
        // recursion detected
        if ($_r > 0) {
            static::_recursion();
            return;
        }
        // stain it
        static::_hive($data);
        // render it
        $collapsed = static::_isCollapsed(static::$_level, count($data) - 1);
        if ($collapsed) {
            $collapse_style = 'style="display: none;"';
        } else {
            $collapse_style = '';
        }
        print "<div class=\"krumo-nest\" {$collapse_style}>";
        print "<ul class=\"krumo-node\">";
        // we're descending one level deeper
        static::$_level++;
        // Object?? - use Reflection
        if ($_is_object) {
            $reflection = new ReflectionObject($data);
            $properties = $reflection->getProperties();
            foreach ($properties as $property) {
                $prefix = null;
                $setAccessible = false;
                if ($property->isPrivate()) {
                    $setAccessible = true;
                    $prefix = 'private';
                } elseif ($property->isProtected()) {
                    $setAccessible = true;
                    $prefix = 'protected';
                } elseif ($property->isPublic()) {
                    $prefix = 'public';
                }
                $name = $property->getName();
                if ($setAccessible) {
                    $property->setAccessible(true);
                }
                $value = $property->getValue($data);
                static::_dump($value, "<span>{$prefix}</span>&nbsp;{$name}");
                if ($setAccessible) {
                    $property->setAccessible(false);
                }
            }
        } else {
            // keys
            $keys = array_keys($data);
            // iterate
            foreach ($keys as $k) {
                // skip marker
                if ($k === $_recursion_marker) {
                    continue;
                }
                // get real value
                $v =& $data[$k];
                static::_dump($v, $k);
            }
        }
        print "</ul>\n</div>";
        static::$_level--;
    }

Usage Example

Exemplo n.º 1
0
 /**
  * Render a dump for an object
  *
  * @param mixed $data
  * @param string $name
  * @access private
  * @static
  */
 private static function _object(&$data, $name)
 {
     $reflection = new ReflectionObject($data);
     $properties = $reflection->getProperties();
     $childCount = count($properties);
     $collapsed = Krumo::_isCollapsed(self::$_level, $childCount);
     // Setup the CSS classes depending on how many children there are
     if ($childCount > 0 && $collapsed) {
         $elementClasses = ' krumo-expand';
     } elseif ($childCount > 0) {
         $elementClasses = ' krumo-expand krumo-opened';
     } else {
         $elementClasses = '';
     }
     print "<li class=\"krumo-child\"> <div class=\"krumo-element {$elementClasses}\"";
     if (count($data) > 0) {
         print 'onClick="krumo.toggle(this);"';
     }
     print 'onMouseOver="krumo.over(this);" onMouseOut="krumo.out(this);">';
     $empty_str = '';
     if ($childCount == 0) {
         $empty_str = ' (empty)';
     }
     print "<a class=\"krumo-name\">{$name}</a> <em class=\"krumo-type\">Object</em> ";
     print Krumo::get_separator() . " <strong class=\"krumo-class\">" . get_class($data) . "</strong>{$empty_str}</div>";
     if ($properties) {
         Krumo::_vars($data);
     }
     print "</li>";
 }