gpt4 book ai didi

php - 对此 PHP 异常 try..catch 嵌套感到困惑

转载 作者:IT王子 更新时间:2023-10-29 00:11:49 28 4
gpt4 key购买 nike

我对下面的代码感到困惑:

class MyException extends Exception {}
class AnotherException extends MyException {}

class Foo {
public function something() {
print "throwing AnotherException\n";
throw new AnotherException();
}
public function somethingElse() {
print "throwing MyException\n";
throw new MyException();
}
}

$a = new Foo();

try {
try {
$a->something();

} catch(AnotherException $e) {
print "caught AnotherException\n";
$a->somethingElse();
} catch(MyException $e) {
print "caught MyException\n";
}
} catch(Exception $e) {
print "caught Exception\n";
}

我希望这个输出:

throwing AnotherException
caught AnotherException
throwing MyException
caught MyException

但它输出:

throwing AnotherException
caught AnotherException
throwing MyException
caught Exception

谁能解释为什么它“跳过”catch(MyException $e)?

谢谢。

最佳答案

异常处理程序捕获由其 try block 范围内的代码引发的异常。

$a->somethingElse() 的调用不会发生在与跳过的异常处理程序关联的 try block 中。它出现在另一个 catch 子句中。

仅仅因为它物理上出现在引发异常的行下方不足以使其覆盖该代码。

恕我直言,缩进大括号的样式选择使这一点不太清楚。前一个 try block 的右括号与下一个 catch 出现在同一行,即使它们是不相关的(好吧,兄弟)范围。

关于php - 对此 PHP 异常 try..catch 嵌套感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2586608/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com