我应该在 PHP8 中使用 trigger_error

Shoud I use trigger_error in PHP8

我正在修改一个 PHP 项目,由于对数据库进行了大规模重新设计,该项目是必需的。 因此,该项目应使用最新的 PHP 版本,在撰写本文时为版本 8。 我还在使用带命名空间的 OOP 方法,因此该项目将来可以从自动加载等功能中受益。

在我写的新 classes 中,我需要抛出错误。 但是在 PHP8 中,有很多方法可以做到这一点。 我可以使用 trigger_error 或异常或错误 class 及其特定变体,如值错误。 现在我不确定该选择哪个。 目前我在代码中混合了异常和 trigger_error。

我为异常和“旧”错误定义了一个自定义处理程序,它将错误写入日志文件,以便我可以修复它们(如果可能)。

那么我应该用什么来写一个面向未来的代码呢? 不幸的是,我在 PHP 文档中找不到任何关于此的内容。 不幸的是,我的网络研究也没有带来任何有用的结果。 有最佳方​​法规则吗?

我不是 PHP 专家。

然而,我的一点观察是最新的 PHP 版本往往更面向对象。 PHP 现在支持许多 OOP 功能,您可以在任何其他完全面向对象的语言(如 C# 或 Java 中找到这些功能。我们可以看到许多 PHP 函数现在抛出异常,并且随着 PHP 7 中的 ExceptionError 以及 PHP 中的 ValueError 的引入8 与臭名昭著的 falsenull.

相比,您可能会遇到并不得不处理异常

一个非常小的 PHP 功能列表现在抛出异常(旁边是版本):

  • 内部 类 的构造函数现在将始终抛出异常 (PHP 7)
  • 调用参数少于强制声明参数的函数会抛出异常(PHP 7.1)
  • 1 + "a" 抛出 TypeError (PHP 8)
  • explode 当分隔符参数为空时抛出 ValueError 字符串 (PHP 8)
  • mb_ord 当 $string 参数为空字符串时抛出 ValueError (PHP 8)
  • MySQLi 默认错误处理模式已从“静默”更改为 “例外”(PHP 8.1)

还有更多会抛出 Errorexception 的实例,而不是导致致命错误。

结论

抛出异常而不是使用 trigger_error