被这个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一样出现在同一行上. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |