将print_r和var_dump与循环引用结合使用

2022-08-30 11:22:00

我正在使用MVC框架Symfony,似乎很多我想调试的内置对象都有循环引用。这使得无法使用 or 打印变量(因为它们无限地遵循循环引用,或者直到进程内存不足,以先到者为准)。print_r()var_dump()

与其用一些智能编写我自己的克隆,还有更好的选择吗?我只想能够将变量(对象,数组或标量)打印到日志文件,http标头或网页本身。print_r

编辑:要澄清问题所在,请尝试以下代码:

<?php

class A
{
    public $b;
    public $c;

    public function __construct()
    {
        $this->b = new B();
        $this->c = new C();
    }
}

class B
{
    public $a;

    public function __construct()
    {
        $this->a = new A();
    }
}

class C
{
}

ini_set('memory_limit', '128M');
set_time_limit(5);

print_r(new A());
#var_dump(new A());
#var_export(new A());

它不适用于 或 。错误消息是:print_r()var_dump()var_export()

PHP 致命错误:允许内存大小为 134217728 字节已耗尽(尝试分配 523800 字节),print_r_test.php第 10 行


答案 1

教义具有相同的服务等级。

用法示例:

<?php echo "<pre>"; \Doctrine\Common\Util\Debug::dump($result, 4); echo "</pre>";?>

答案 2

我们正在使用PRADO框架,它有一个名为“TVarDumper”的内置类,可以很好地处理如此复杂的对象 - 它甚至可以将其格式化为漂亮的HTML,包括语法突出显示。你可以从这里获得该类。


推荐