PHP - 非递归var_dump?

Jak*_*son 9 php var-dump

在处理某些PHP对象时,可以执行一个var_dump()和PHP打印的值继续打开和打开,直到达到PHP内存限制为止.一个例子是转储Simple HTML DOM对象.我假设因为你能够遍历对象的子对象和父对象,所以这样做var_dump()会产生无限的结果,因为它找到一个对象的父对象,然后递归地找到它的子对象然后找到所有这些孩子的父对象并找到那些孩子等等.它会继续下去.

我的问题是,你怎么能避免这种情况并让PHP不要一遍又一遍地倾销掉同样的东西?使用Simple HTML DOM解析器示例,如果我有一个没有子var_dump()节点的DOM对象,我想它只是转储对象并且没有开始遍历DOM树并且倾倒父母,祖父母,其他孩子等等.

chu*_*die 5

在开发环境中安装XDebug扩展.它将var_dump替换为自己的var_dump,默认情况下只有3个成员.

https://xdebug.org/docs/display

它将显示4个级别的项目作为省略号.您可以使用ini设置更改深度.

所有PHP函数:var_dump,var_export和print_r都不跟踪递归/循环引用.

编辑:

如果你想以艰难的方式去做,你可以编写自己的功能

print_rr($thing, $level=0) {
   if ($level == 4) { return; }
   if (is_object($thing)) {
       $vars = get_object_vars($thing);

   }

   if (is_array($thing)) {
       $vars = $thing;
   }
   if (!$vars) {
       print " $thing \n";
       return;
   }

   foreach ($vars as $k=>$v) {
      if (is_object($v)) return print_rr($v, $level++);
      if (is_array($v)) return print_rr($v, $level++);
      print "something like var_dump, var_export output\n";
   }
}
Run Code Online (Sandbox Code Playgroud)