【问题标题】:Is there a difference between Exception and RuntimeException in PHP?php:异常和运行时异常之间的区别?
【发布时间】:2017-05-27 06:17:56
【问题描述】:

php 中\Exception\RuntimeException 之间的确切语义区别是什么?
什么时候应该使用前者,什么时候使用后者?

【问题讨论】:

  • Exception 是其他异常扩展的通用异常类。 RuntimeException 和其他异常可以为您抛出的异常提供额外的语义含义。 PHP ExceptionsRuntimeException。理想情况下,您应该抛出最适合该错误的异常类。我经常在我的 catch 块中使用通用 Exception 来捕获任何类型的异常。
  • 两者都是正确的,但RuntimeException 更具体。它告诉异常只能在程序运行时发生
  • @C̲̅R̲̅O̲̅Z̲̅E̲̅T̲̅,出于好奇,在PHP中程序未运行时可能发生的异常示例?
  • 更准确地说,程序会一直运行。 RuntimeExceptionLogicException 相对:LogicException 需要修复代码以使程序再次运行,而 RuntimeException 可能是由错误的用户输入引起的
  • 好多了。并且比公认的答案更好。 :)

标签: php exception-handling


【解决方案1】:

这两者之间的唯一区别是语义。 \RuntimeException 继承自 \Exception。基本上没有其他区别。

您可以创建自己的异常继承自上述两者,最常见的用法是从\Exception继承。

【讨论】:

    【解决方案2】:

    Exception 是 PHP 中所有异常的基类(包括RuntimeException)。 正如文档所说:

    如果错误只能在 运行时发生。

    这意味着每当您期望某些通常应该起作用的东西时出错,例如:除以零或数组索引超出范围等。您可以抛出 RuntimeException。

    至于Exception,这是一个非常普遍的例外,我将其称为“最后的手段”。您可以将其添加为“尝试”中的最后一个,以确保您正在处理所有异常。

    例子:

    try {
        //code...
    } catch(RuntimeException $e) {
        echo ("RuntimeException..."); 
    } catch(Exception $e) {
        echo ("Error something went wrong!"); 
        var_dump($e); 
    }
    

    希望现在很清楚。

    【讨论】:

    • 所以,你建议使用 \RuntimeException 但也 \Exception 作为“最后的手段” catch ...?
    • 只使用Exception 你也会捕获RuntimeException,因为它继承自Exception。一切都与语义有关。
    • @sensorario 如果您知道它可能会发生并且您处理它的方式与所有其他类型的异常不同,我建议您同时使用它们。如果您在捕获异常后所做的只是将消息打印到日志文件中,那么仅使用通用异常会更快,因为您不必花费额外的时间来编写这些行;)
    • 问题是关于语义的。 “通常应该起作用的东西,出错了”是不够的解释,因为你可以用同样的方式解释Exception
    猜你喜欢
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 2019-11-14
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多