gpt4 book ai didi

PHP - 非递归 var_dump?

转载 作者:可可西里 更新时间:2023-11-01 12:18:37 29 4
gpt4 key购买 nike

当处理某些 PHP 对象时,可以执行 var_dump() 并且 PHP 将值打印到屏幕上,不断打印,直到达到我假设的 PHP 内存限制。这方面的一个例子是转储一个简单的 HTML DOM 对象。我假设因为您能够遍历对象的子对象和父对象,所以执行 var_dump() 会给出无限的结果,因为它找到一个对象的父对象,然后递归地找到它的子对象,然后找到所有这些子对象的 parent 并找到那些 child ,等等等等。它会继续下去。

我的问题是,如何避免这种情况并防止 PHP 以递归方式一遍又一遍地转储相同的内容?使用简单的 HTML DOM 解析器示例,如果我有一个没有子对象的 DOM 对象并且我var_dump() 它,我希望它只转储对象而不开始遍历 DOM 树以及抛弃 parent 、祖 parent 、其他 child 等。

最佳答案

在您的开发环境中安装 XDebug 扩展。它用自己的变量替换了 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";
}
}

关于PHP - 非递归 var_dump?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7265191/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com