PHP异常是否会停止执行?

Not*_*ggs 39 php exception

<?php
     function some_function($arg) {
         if($filter->check_for_safe_input($arg)) {
             throw new Exception("Hacking Attempt");
         }
         do_some_database_stuff($arg);
     }
 ?>
Run Code Online (Sandbox Code Playgroud)

在上面的代码示例中,do_some_database_stuff如果check_for_safe_input失败,是否会被调用,或者异常是否会停止运行的函数?这是我从未完全确定的事情,通常我只是do_some_database_stuff在else语句中粘贴函数以确定,但这往往导致巨大的嵌套函数.

Dar*_*rov 46

是的,未捕获的异常会导致致命错误,从而停止执行脚本.因此,do_some_database_stuff如果抛出异常,则不会调用该函数.您可以在本文中阅读有关异常的更多信息.

  • 不,一旦抛出异常,函数执行就会停止(好像你返回了一些结果),并且异常在调用堆栈中冒泡,直到找到`catch`语句. (6认同)
  • 如果在调用此函数的函数中被捕获怎么办?然后,该功能的其余部分是否会运行? (2认同)

sve*_*ens 13

看一下关于异常的PHP手册.

抛出异常时,不会执行语句后面的代码,PHP将尝试查找第一个匹配的catch块.如果未捕获异常,则将发出带有"Uncaught Exception ..."消息的PHP致命错误,除非已使用set_exception_handler()定义了处理程序.

http://ch.php.net/exceptions

所以,是的,函数的其余部分没有被执行,而是发生了fata错误.
如果捕获异常,脚本的执行将在相应的catch块中继续执行,抛出异常的函数和catch块之间的所有内容都不会执行.


Gor*_*don 5

异常,如果没有被捕获,将结束脚本执行。

请参阅有关异常PHP 手册章节