Exemple #1
0
 public function parse(&$var, Kint_Object &$o)
 {
     if (!is_object($var) || !($var instanceof DOMNamedNodeMap || $var instanceof DOMNodeList)) {
         return;
     }
     // Recursion (This should never happen, should always be stopped at the parent DOMNode)
     if (in_array('recursion', $o->hints)) {
         return;
     }
     $o->size = $var->length;
     if ($o->size === 0) {
         $o->replaceRepresentation(new Kint_Object_Representation('Iterator'));
         $o->size = null;
         return;
     }
     // Depth limit
     // Make empty iterator representation since we need it in DOMNode to point out depth limits
     if ($this->parser->max_depth && $o->depth + 1 >= $this->parser->max_depth) {
         $b = new Kint_Object();
         $b->name = $o->classname . ' Iterator Contents';
         $b->access_path = 'iterator_to_array(' . $o->access_path . ', true)';
         $b->depth = $o->depth + 1;
         $b->hints[] = 'depth_limit';
         $r = new Kint_Object_Representation('Iterator');
         $r->contents = array($b);
         $o->replaceRepresentation($r, 0);
         return;
     }
     $data = iterator_to_array($var, true);
     $r = new Kint_Object_Representation('Iterator');
     $o->replaceRepresentation($r, 0);
     foreach ($data as $key => $item) {
         $base_obj = new Kint_Object();
         $base_obj->depth = $o->depth + 1;
         $base_obj->name = $item->nodeName;
         if ($o->access_path) {
             if ($var instanceof DOMNamedNodeMap) {
                 $base_obj->access_path = $o->access_path . '->getNamedItem(' . var_export($key, true) . ')';
             } elseif ($var instanceof DOMNodeList) {
                 $base_obj->access_path = $o->access_path . '->item(' . var_export($key, true) . ')';
             } else {
                 $base_obj->access_path = 'iterator_to_array(' . $o->access_path . ', true)[' . var_export($key, true) . ']';
             }
         }
         $r->contents[] = $this->parser->parse($item, $base_obj);
     }
 }