在例外中使用print_r?

时间:2012-12-07 14:56:39

标签: php

  

可能重复:
  putting print_r results in variable

我正在抛出异常并尝试在异常中包含变量,如下所示:

throw new Exception('Oh no, an exception! ' . $variable);

(其中$variable是一个数组)

问题是,这只会在我的日志文件中添加以下内容:

  

不,是个例外!阵列

不幸的是我不是PHP的专家,我猜这可能意味着两件事之一:

1)$ variable是一个空数组

2)$ varialbe是一个包含数据的数组,但在异常中输出它不会输出所有内容

请告诉我1)是否属于这种情况(我希望不是这样)

但是,如果是2),我怎样才能获得有关$variable的更多信息?是否可以在异常中执行print_rvar_dump,如下所示:

throw new Exception('Oh no, an exception! ' . print_r($variable));

或者会导致问题吗?

3 个答案:

答案 0 :(得分:7)

  

或者会导致问题吗?

是的,它会的。在完全构造字符串之前将评估print_r,如果您尝试打印出Exception消息,输出将如下所示:

Array
(
    [x] => 5
    [y] => 65
)
Oh no, an exception! 1

要解决此问题,您需要确保将print_r$return参数设置为true,以便返回值而不是回显:

throw new Exception('Oh no, an exception! ' . print_r($variable, true));

答案 1 :(得分:6)

使用第二个参数true来返回输出而不是立即输出。

print_r($variable, true)

Documentation is your friend

答案 2 :(得分:4)

如果查看documentation for print_r,您会看到第二个参数,如果真的,导致函数将信息作为字符串返回而不是立即发出。