我创建了一个扩展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。如果我删除它一切都很好。为什么?谁知道..
答案 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";
}
?>