编程

PHP 8.4: E_STRICT 常量弃用

108 2024-12-14 18:53:00

PHP中的所有错误、警告和通知都有一个错误级别,使用 error_reportingset_error_handler 函数,PHP 应用可以控制报告哪些错误,并用自定义回调覆盖默认的错误处理行为。

PHP 有各种各样的错误级别,E_ALL 常量是所有 E_ 常量的位掩码 OR,这意味着设置错误报告或错误处理程序来报告/处理所有错误、警告和通知。

PHP 之前发出的错误级别之一是 E_STRICT,针对的代码不是“严格”正确的,以确保互操作性和前向兼容性。PHP 7.0 将大多数现有的 E_STRICT 警告转换为 E_NOTICE,自 PHP 8.0 以来,所有 E_STRICT 通知都更改为 E_NOTICE

由于自 PHP 8.0 以来,所有 E_STRICT 通知都升级为 E_NOTICE,因此 PHP 8.5 弃用了 E_STRICT 常量。

error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
Constant E_STRICT is deprecated

替换建议

PHP 8.0 及更高版本之后的 PHP 核心和核心扩展根本不会发出 E_STRICT 通知。可以安全地假设,在 PHP 8.0 及更高版本上运行的任何 PHP 应用都永远不会遇到 E_STRICT 通知,并且可以安全地更新错误报告和处理以忽略 E_STRICT 通知。

- error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
+ error_reporting(E_ALL & ~E_DEPRECATED);

PHP 7.4 之前的 PHP 7 版本,下列函数会条件性地发出 E_STRICT 通知:

  • htmlentities
  • mysqli_next_result
  • mysqli_stmt_next_result

必须支持 PHP 7.3 或更早版本的 PHP 应用可以有条件地调用具有适当错误级别的 error_reportingset_error_handler 函数:

- error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
+ if (PHP_VERSION_ID >= 70400) {
+   error_reporting(E_ALL & ~E_DEPRECATED);
+ }
+ else {
+   error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
+ }

E_ALL 常量值改变

PHP 8.4 中赋值给 E_ALL 常量的值从 32767 改为 30719

向后兼容性影响

E_STRICT 常量在 PHP 8.4 中已弃用。现在,在 PHP 8.4 及更高版本中,代码中的任何地方使用该常量都会发出弃用通知。

E_STRICT 常量将在 PHP 9.0 中被移除。
选择性排除 E_STRICT 通知的自定义错误处理程序和错误报告控件可以将其调整为忽略 E_STRCT 通知,以避免弃用通知。