我不明白为什么这段代码:
class MyException extends Exception {};
try {
try {
throw new MyException;
} catch (Exception $e) {
echo "1:";
throw $e;
} catch (MyException $e) {
echo "2:";
throw $e;
}
}
catch (Exception $e) {
echo get_class($e);
}
返回:1:MyException。
是不是应该捕获第二个MyException,因此返回2?
我认为有多个例外,它首先查找当前的try / catch,但看起来它从第一次尝试中捕获了异常?或者是因为MyException是空的而是使用Exception?
答案 0 :(得分:1)
此处的异常是MyException类的基类。你的$ e变量有MyException类,所以一切都是正确的。如果你做:
echo "1:";
var_dump($e);
throw $e;
你会看到$ e是对象(MyException)。您还没有投射类型,只需使用polymorphism。
所有具有Exception类型或其子类型的对象都将在第一个块中捕获。代码将首先通过可以应用异常的订单块执行。
答案 1 :(得分:1)
Catch块按它们出现的顺序处理。用于捕获MyException的代码将从不被调用,因为Exception的所有子类都会在第一个catch块中捕获。