PHP 8.3.0 RC 6 available for testing

其他变更

SAPI 模块的变更

CLI

如果没有安装 readline 扩展,使用 -a 选项现在将导致错误。在之前,如果没有 readline 扩展的话 -a 与直接无参数调用 php 的表现一样,除了额外显示一行 "Interactive mode enabled" 消息。这个模式非交互模式

PHPDBG

phpdbg 的远程功能已经被移除。

函数的变更

核心

foreachvar_dump()serialize()、对象比较等场景中属性的顺序发生了改变。现在,属性将根据它们的声明与继承进行排序,在基类中声明的属性将排在子类属性之前。

这个顺序与 zend_object 结构中属性的内部布局保持一致,并且重复了 default_properties_table[]properties_info_table[] 中的顺序。旧的顺序没有被记录下来,是由类的继承实现细节造成的。

Filter

FILTER_VALIDATE_INT 过滤器的 FILTER_FLAG_ALLOW_OCTAL 标识现在接受带八进制前缀("0o"/"0O")的八进制字符串。

GMP

所有的 GMP 函数现在接受带八进制前缀("0o"/"0O")的八进制字符串。

PDO ODBC

带着 PDO::ATTR_SERVER_INFOPDO::ATTR_SERVER_VERSION 常量的 PDO::getAttribute() 方法现在返回的是值而不是抛出 PDOException 异常。

Reflection

ReflectionProperty::setAccessible()ReflectionMethod::setAccessible() 将不再起作用。属性和方法现在总被认为是能够通过反射访问的。

常规

syslog() 现在是二进制安全的。

其他扩展变更

GD

imagewebp() 现在可以通过传递 IMG_WEBP_LOSSLESS 作为质量来实现无损的 WebP 编码了。

这个常量只有在所使用的 libgd 支持无损 WebP 编码的情况在才会被定义。

MySQLi

在连接 libmysqlclient 时,mysqli_stmt::next_result()mysqli::fetch_all() 现在可以使用了。

OpenSSL

  • OpenSSL 扩展现在至少需要 OpenSSL 1.0.2 版本。

  • 现在已经支持 OpenSSL 3.0 了。请注意许多密码算法(部分老的提供者)不再是默认启用的,以及参数校验(例如:最小秘钥长度)比以前更加严格了。

Phar

  • 现在签名的默认算法为 SHA256。

  • 签名算法增加了对 OpenSSL_SHA256 和 OpenSSL_SHA512 的支持。

SNMP

  • 为安全协议增加了对 SHA256 和 SHA512 的支持。

常规

--with-password-argon2 现在使用 pkg-config 来检测 libargon2。因此现在应该使用 PKG_CONFIG_PATH 来修改 libargon2 的位置。

INI 文件处理的变化

  • INI 配置项 log_errors_max_len 已经被移除。从 PHP 8.0.0 开始将不再起作用。

  • 一个在引用字符串中的前置美元符号现在可以被转义:"\${" 将会被解释为内容包含 ${ 的字符串。

  • 双引号内的字符串中反斜线现在被更一致地视为转义字符。之前 "foo\\" 的后面如果是除换行之外的其他字符是不被视为一个终止字符串的。现在,它被解释成一个内容为 foo\ 的字符串。然而有一个例外的地方是后面跟着换行符的字符串 "foo\" 将继续被视为一个有效的、内容为“foo\”的字符串,而不是一个还没有结束的字符串。这个例外的存在是为了天然支持 Windows 文件路径的使用,如 "C:\foo\"

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top