加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

被这个PHP异常混淆了try..catch嵌套

发布时间:2020-12-13 13:15:11 所属栏目:PHP教程 来源:网络整理
导读:我被以下代码困惑: class MyException extends Exception {}class AnotherException extends MyException {}class Foo { public function something() { print "throwing AnotherExceptionn"; throw new AnotherException(); } public function somethingE
我被以下代码困惑:
class MyException extends Exception {}
class AnotherException extends MyException {}

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

$a = new Foo();

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

  } catch(AnotherException $e) {
    print "caught AnotherExceptionn";
    $a->somethingElse();    
  } catch(MyException $e) {
    print "caught MyExceptionn";
  }
} catch(Exception $e) {
  print "caught Exceptionn";
}

我会期望这样输出:

throwing AnotherException
caught AnotherException
throwing MyException
caught MyException

而是输出:

throwing AnotherException
caught AnotherException
throwing MyException
caught Exception

有人可以解释为什么它“跳过”catch(MyException $e)?

谢谢.

异常处理程序捕获其try块范围内的代码引发的异常.

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

只是因为它出现在物理下方,引发异常不足以使其覆盖该代码.

缩进括号的风格选择使这一点不那么清楚.即使它们是不相关的(兄弟姐妹)范围,上一个try块的关闭括号与下一个catch一样出现在同一行上.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读