显示来自私有/受保护属性和方法的数据

时间:2011-02-19 11:56:31

标签: php exception

我正在对象上执行print_r()。它显示格式良好的输出。但是,我想控制输出。我希望能够格式化并添加标题/标题到输出的某些部分。 print_r()很棒,但我无法弄清楚如何访问输出中的不同行。 我试图做这样的事情:

echo '<h1>ERRORS</h1>';
echo '<h3>Properties</h3>';
print_r(Exception::$message);

但是,$ message被设置为受保护的属性,所以我最终得到了这个错误:

Fatal error: Cannot access protected property Exception::$message...

我不想访问$ message来修改它。我只是想像print_r()那样显示它...但很好地格式化我的方式。也许我并没有完全理解“访问”的真正含义。

我也尝试过这样的事情:

$lines = explode("\n", print_r(Exception::$message, true));
foreach ($lines as $line) {
    echo $line;
}

...但我得到了同样的错误

Fatal error: Cannot access protected property Exception::$message...

有办法做到这一点吗?或者有没有办法正确访问print_r()的内容?

2 个答案:

答案 0 :(得分:1)

print_r()以及var_dump()仅用于调试,因此它从未打算过,它应该看起来不错。

但是,如果要输出更“漂亮”的对象,则需要自己构建它。看看Reflection-API

您不应该在生产服务器上留下这种(调试)输出!

答案 1 :(得分:0)

print_r的输出是一段简单的文本,你无法控制它 - 它只是一些变量或对象内容的转储。如果你想要格式化,你必须滚动你自己的print_r版本,特别是如果你想处理一个对象的受保护/私有部分。由于它们受到保护,因此无法从对象外部访问它们。

e.g。

 $x = new MyObj;
 print_r($x::some_protected_variable);

不起作用,因为在访问该变量时您不在“对象内”。您必须向对象添加“转储”方法:

 $x = new MyObj;
 $x->dump('some_protected_variable');

并让dump函数进行访问/转储。