我创建了一个扩展Exception
的类MyException
,并在其构造函数中写道:$this->message = array("a"=>"A", "b"=>"B")
.
之后,当我打电话给getMessage()
时,我按预期得到了阵列。
一段时间后,我开始收到字符串"数组"的消息。在调试模式下查看时,我看到在抛出exception
之前,消息仍然很好,但在catch
内部它突然只显示字符串"Array"。
当我读到它时,我开始质疑它实际上是如何工作的,因为听起来你不能把array
作为信息,但我向上帝发誓它奏效了。
我知道我可以在不同的字段中设置数组,但我想使用getMessage()
这样我就可以像使用常规Exception
一样处理MyException
。
编辑:
下面是一个使问题更清晰的示例:
$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 放在设备上。如果我删除它,一切都很好。为什么?谁知道呢。。
这很好用,当然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";
}
?>