PHP 8.5.0 Released!

弃用功能

PHP 核心

用户输出处理程序变更

已弃用在用户输出处理程序中尝试生成输出(例如使用 echo)。该弃用警告会绕过当前处理程序直接输出,以确保警告可见;若存在嵌套的输出处理程序,则会继续使用下一个处理程序。

非标准的类型转换名称

已弃用非标准的类型转换名称 (boolean)(integer)(double)(binary),应分别改用 (bool)(int)(float)(string)

使用分号终止 case 语句

已弃用在 case 语句末尾使用分号而非冒号作为终止符的做法。

反引号运算符

已弃用将反引号运算符作为 shell_exec() 的别名。

从 __debugInfo() 返回 null

已弃用从 __debugInfo() 返回 null,应改用返回空数组。

report_memleaks INI 指令

已弃用 report_memleaks INI 指令。

常量重复声明

已弃用常量的重复声明。需要注意的是,此操作此前已会触发警告,今后仍将继续如此。

闭包绑定问题

以下闭包绑定问题此前已触发 E_WARNING,现已标记为废弃:

  • 将实例绑定到静态闭包。
  • 将方法绑定到不是该方法所属类(或其子类)的实例对象上。
  • 从方法中解绑 $this。
  • 从使用了 `$this` 的闭包中解绑 $this。
  • 将闭包绑定到内部类的作用域。
  • 重新绑定从函数或方法创建的闭包的作用域。

__sleep() 和 __wakeup() 魔术方法

已软废弃 __sleep()__wakeup() 魔术方法,建议改用 __serialize()__unserialize() 魔术方法;若需兼容 PHP 7,可同时使用这两组方法。

使用 null 作为数组偏移量

null 用作数组偏移量或在调用 array_key_exists() 时使用 null 现已废弃,应改用空字符串。

递增非数字字符串

对非数字字符串进行递增操作现已废弃,应改用 str_increment() 函数。

register_argc_argv INI directive

对于非 CLI SAPI,从查询字符串中推导 $_SERVER['argc']$_SERVER['argv'] 的做法现已废弃。应配置 register_argc_argv=0,并在确认使用安全的前提下,改用 $_GET$_SERVER['QUERY_STRING'] 来获取相关信息。

cURL

已废弃 curl_close() 函数,因为 CurlHandle 对象会自动释放。

已废弃 curl_share_close() 函数,因为 CurlShareHandle 对象会自动释放。

Date

已废弃 DATE_RFC7231DateTimeInterface::RFC7231 常量,因为会忽略其关联的时区,始终使用 GMT。

FileInfo

已废弃 finfo_close() 函数,因为 finfo 对象会自动释放。

已废弃 finfo_buffer() 函数的 $context 参数,因为会忽略其参数。

GD

已废弃 imagedestroy() 函数,因为 GdImage 对象会自动释放。

Hash

已废弃 MHASH_* 常量。

Intl

已废弃 intl.error_level INI 配置项。应手动检查错误,或通过启用 intl.use_exceptions INI 配置项来使用异常处理。

LDAP

已废弃部分 Oracle Instant Client 调用和常量。受影响的调用列表: 受影响的调用列表:

受影响的常量列表:
  • GSLC_SSL_NO_UATH
  • GSLC_SSL_ONEWAY_UATH
  • GSLC_SSL_TWOWAY_UATH

MySQLi

已废弃 mysqli_execute() 别名函数,应改用 mysqli_stmt_execute()

OpenSSL

已废弃 openssl_pkey_derive()$key_length 参数,因为要么忽略该参数,要么会截断密钥,可能引发安全漏洞。

PDO

由于来自远程 URI 的 DSN 存在安全风险,已废弃 "uri:" DSN 方案。

已废弃 PDO 类中的驱动专属常量。受影响的常量及其替代项如下:

已废弃 PDO 类中的驱动专属方法。受影响的方法及其替代项如下:

PDO_PGSQL

已废弃与事务状态相关的常量,因为 PDO 不支持此功能:

  • PDO::PGSQL_TRANSACTION_IDLE
  • PDO::PGSQL_TRANSACTION_ACTIVE
  • PDO::PGSQL_TRANSACTION_INTRANS
  • PDO::PGSQL_TRANSACTION_INERROR
  • PDO::PGSQL_TRANSACTION_UNKNOWN

Reflection

已废弃各类 Reflection 对象的 setAccessible() 方法,因为这些方法已不再生效。

已废弃调用 ReflectionClass::getConstant() 获取不存在的常量。

已废弃调用 ReflectionProperty::getDefaultValue() 获取无默认值的属性。

SPL

已废弃将 spl_autoload_call() 函数作为回调参数传递给 spl_autoload_unregister() 来注销所有自动加载器的做法。如有需要,应遍历 spl_autoload_functions() 的返回值,并对每个元素调用 spl_autoload_unregister()

已废弃 SplObjectStorage::contains()SplObjectStorage::attach()SplObjectStorage::detach() 方法,分别推荐使用 SplObjectStorage::offsetExists()SplObjectStorage::offsetSet()SplObjectStorage::offsetUnset()

已废弃将 ArrayObjectArrayIterator 与对象一起使用。

标准

已废弃 socket_set_timeout() 别名函数,应改用 stream_set_timeout()

已废弃将 null 传递给 readdir()rewinddir()closedir() 以使用最近打开的目录,应显式传入最近打开的目录资源。

现已废弃向 chr() 传入 [0, 255] 区间以外的整数,因为一个字节只能容纳该区间内的值。

现已废弃向 ord() 传入非单字节的字符串,这通常表明存在错误。

已废弃局部预定义变量 $http_response_header,应改用调用 http_get_last_response_headers() 函数。

XML

已废弃 xml_parser_free() 函数,因为 XMLParser 对象会自动释放。

添加备注

用户贡献的备注

此页面尚无用户贡献的备注。
To Top