php:捕获异常并继续执行,是否可能?

Kir*_*lla 64 php

是否有可能捕获异常并继续执行脚本?

Fel*_*ing 127

是的,但这取决于你想要执行的内容:

例如

try {
   a();
   b();
}
catch(Exception $e){
}

c();
Run Code Online (Sandbox Code Playgroud)

c()将永远执行.但是,如果a()抛出一个异常,b()没有执行.

只将内容放入try彼此依赖的块中.例如,b取决于某些结果,在块之后a放置是没有意义btry-catch.

  • `$ e`需要是`\ Exception $ e`或者是simular或者会抛出一个解析错误 (2认同)

Dou*_* T. 89

当然,只是抓住你想继续执行的例外......

  try
  {
      SomeOperation();
  }
  catch (SomeException $e)
  {
      // do nothing... php will ignore and continue    
  }
Run Code Online (Sandbox Code Playgroud)

当然,这有一个问题,即默默地丢弃可能是一个非常重要的错误.SomeOperation()可能会失败导致其他微妙的,难以弄清楚的问题,但你永远不会知道你是否默默地删除了异常.

  • 如果我可以添加:捕获异常而不在catch块中执行任何操作被认为是坏样式,您至少应该写一些日志输出(或者,如示例中所示,提供一个注释,真的,真的,真的没有什么必须完成).如果使用catch(Exception $ ex){}捕获_any_异常,则尤其如此 (6认同)
  • 尔加!打败我21秒. (2认同)
  • 那么您如何记录它并仍然继续? (2认同)
  • 最佳实践是使用:尝试 -> 捕获(处理异常)-> 最后(最终总是运行的地方)也许你的想法有误,但仍然想给你一些输入。 (2认同)

Dom*_*ger 16

当然:

try {
   throw new Exception('Something bad');
} catch (Exception $e) {
    // Do nothing
}
Run Code Online (Sandbox Code Playgroud)

您可能希望阅读有关例外的PHP文档.

  • +1阅读手册的建议. (4认同)
  • 我现在已经阅读了我的评论。我真的不知道我的意思! (3认同)

Abd*_*des 11

php > 7

使用新界面 Throwable

    try {
        // Code that may throw an Exception or Error.
    } catch (Throwable $t) {
        // Handle exception
    }

echo "Script is still running..."; // this script will be executed.
Run Code Online (Sandbox Code Playgroud)

  • 如果你告诉某人“使用”某物,也要告诉他“为什么”。为什么“Throwable”比“Exception”更好? (4认同)

Chr*_*ras 11

对于PHP 8+,我们可以省略捕获异常的变量名称。

catch

从 PHP 8.0.0 开始,捕获的异常的变量名称是可选的。如果未指定,catch 块仍将执行,但无法访问抛出的对象。

因此我们可以这样做:

try {
  throw new Exception("An error");
}
catch (Exception) {}
Run Code Online (Sandbox Code Playgroud)


Cra*_*ast 6

是.

try {
    Somecode();
catch (Exception $e) {
    // handle or ignore exception here. 
}
Run Code Online (Sandbox Code Playgroud)

然而请注意,php也有与异常分开的错误代码,这是php之前有oop原语的遗留保留.大多数库内置程序仍会引发错误代码,而不是异常.要忽略错误代码,请调用前缀为@的函数:

@myfunction();
Run Code Online (Sandbox Code Playgroud)