我正在对象上执行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()的内容?
答案 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函数进行访问/转储。