嵌套自定义Exception示例

时间:2015-11-29 10:22:58

标签: php exception

我不明白为什么这段代码:

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?

2 个答案:

答案 0 :(得分:1)

此处的异常是MyException类的基类。你的$ e变量有MyException类,所以一切都是正确的。如果你做:

echo "1:";
var_dump($e);
throw $e;

你会看到$ e是对象(MyException)。您还没有投射类型,只需使用polymorphism

所有具有Exception类型或其子类型的对象都将在第一个块中捕获。代码将首先通过可以应用异常的订单块执行。

答案 1 :(得分:1)

Catch块按它们出现的顺序处理。用于捕获MyException的代码将从不被调用,因为Exception的所有子类都会在第一个catch块中捕获。