42、PHP 8.4 中弃用 - E_STRICT 常量已弃用
PHP 错误级别和弃用 E_STRICT 常量
PHP 中的所有错误、警告和通知都有一个指定的错误级别,使用 error_reporting
和 set_error_handler
函数,PHP 应用程序可以控制哪些错误会被报告,并通过自定义回调覆盖默认的错误处理行为。
PHP 有多种错误级别,其中 E_ALL
常量是所有 E_
常量的按位 OR,意味着设置错误报告或错误处理程序报告/处理所有的错误、警告和通知。
E_STRICT 错误级别的变化
之前,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);
弃用 E_STRICT
常量的替代方案
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.x 中的兼容处理
在 PHP 7 系列(PHP 7.4 之前),以下函数会有条件地发出 E_STRICT
通知:
-
htmlentities
-
mysqli_next_result
-
mysqli_stmt_next_result
对于需要支持 PHP 7.3 或更早版本的 PHP 应用程序,可以有条件地调用 error_reporting
和 set_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 代码中使用此常量将会在 PHP 8.4 及以后的版本中触发弃用通知。 -
E_STRICT
常量将在 PHP 9.0 中被移除。
自定义错误处理程序和错误报告控制
对于有条件排除 E_STRICT
通知的自定义错误处理程序和错误报告控制,可以调整其设置,忽略 E_STRICT
通知,以避免弃用通知。
自定义和 PECL 扩展发出 E_STRICT 通知
理论上,PECL 和自定义 PHP 扩展仍然可能会发出 E_STRICT
通知。然而,由于大多数 PECL 扩展已经将 E_STRICT
通知改为 E_NOTICE
,因此这种情况不太可能发生。