何时使用 trigger_error() 与 throw new Error()?

When to use trigger_error() vs throw new Error()?

throw new Exception 当我可以 catch 失败并采取一些措施时。如果我对此无能为力,那么我就 trigger_error().

现在 PHP 7 中有一些新内容:throw new Error

例如,

if (!mail(...))
    throw new Error('...');

if (!mail(...))
    trigger_error('...');

如果我不想 catch 错误或在 mail() 失败的情况下做某事,我应该使用 throw new Error() 还是简单的旧 trigger_error()

我们应该使用哪些实例 throw new Error() 与简单的 trigger_error()

正如您已经提到的,\Error class 是在 PHP 7.

中引入的

它的行为完全像一个异常,因为它实现了 Throwable

它还属于以下class:

  ArithmeticError
    DivisionByZeroError
  AssertionError
  ParseError
  TypeError
    ArgumentCountError

然而,它的行为不像 trigger_error(),事实上它的行为完全像一个异常(主要是因为它是一个异常)。

如果你trigger_error()你就抓不到它,因为它不是一个例外。虽然有are workarounds.


这主要是我的猜测。

我假设这是为了更清楚地分离错误和异常,未来的计划可能包括弃用 trigger_error 并仅保留 Error


回答你的问题。

我会坚持 throwing 而不是 trigger_error。它是可捕获的,它是面向对象的。