将异常消息设置为数组

时间:2016-02-25 11:46:53

标签: php exception

我创建了一个扩展MyException的类Exception,并在其构造函数中写道:$this->message = array("a"=>"A", "b"=>"B")
之后,当我打电话给getMessage()时,我按预期得到了数组 在我开始将消息作为字符串" Array"之后的一段时间。在查看调试模式时,我看到在抛出exception之前消息仍然很好但在catch内它突然只显示字符串"数组"。
当我读到它时,我开始质疑它实际上是如何起作用的,因为听起来你不能放置array作为信息,但我向上帝发誓它有效。
我知道我可以在不同的字段中设置数组,但我想使用getMessage(),因此我可以使用MyException和常规Exception一样工作。

编辑:
这是一个让问题更加清晰的例子:

        $ex = new MyException("SomeValue", "AnotherValue");
        echo "Before: ";
        print_r($ex->getMessage());
        echo "\n";
        try
        {
            throw $ex;
        } catch (Exception $ex) {
            echo "After: ";
            print_r($ex->getMessage());
            echo"\n";
        }         

输出:

Before: Array(
[a] => SomeValue
[b] => AnotherValue)
After: Array    

编辑#2:
我想到了。为了激活调试器,我在设备上放置了xdebug.so。如果我删除它一切都很好。为什么?谁知道..

1 个答案:

答案 0 :(得分:0)

这很好,print_r当然:

<?php 
class MyException extends Exception {       
    public function __construct($a, $b) { 
        $this->message = array("a" => $a, "b" => $b);
    } 
}

$ex = new MyException("SomeValue", "AnotherValue");
echo "Before: ";
print_r($ex->getMessage());
echo "\n";
try
{
    throw $ex;
} catch (Exception $ex) {
    echo "After: ";
    print_r($ex->getMessage());
    echo"\n";
} 
?>