有人可以解释我这个例外是如何工作的吗?

Can someone explain my how this exceptions works?

我在 Internet 上发现了一个关于异常和错误的非常有趣的问题,但我无法解决。

class MyException extends Exception {
    public function __construct(string $message) {
        $this -> message = $message;
    }
}

class A {
    public function __construct() {
        throw new MyException("an error appeared");
    }
}

$err = null;
try {
    new A();
}
catch (MyException $err) {
    throw new Exception('another error appeared');
}
catch (Exception $err) {
    echo $err;
}

当我执行我收到的代码时

Fatal error: Uncaught Exception: another error appeared in C:\xampp

我不明白这是代码的问题还是它实际是这样工作的。也许你可以帮助我。 那个致命错误是针对未处理的异常? 谢谢!

是的,致命错误是针对此处未处理的异常:

$err = null;
try {
    new A();
}
catch (MyException $err) {
--->throw new Exception('another error appeared');
}
catch (Exception $err) {
    echo $err;
}

如果您想知道是什么导致了这种情况,请查看您的代码片段中的这一行:

$err = null;
try {
--->    new A();
}

第二个 catch 块没有捕获第一个 catch 块中抛出的异常。它只能用于捕获第一个 try 块中抛出的其他类型的异常。 要捕获第二个异常,您需要添加一个嵌套的 try catch:

try {
    new A();
}
catch (MyException $err) {
    try {
        throw new Exception('another error appeared');
    }
    catch (Exception $err) {
        echo $err;
    }
}