PHP - Manual: 其他变更
2024-12-30
如果没有安装 readline 扩展,使用
-a 选项现在将导致错误。在之前,如果没有 readline 扩展的话 -a
与直接无参数调用 php 的表现一样,除了额外显示一行
"Interactive mode enabled"
消息。这个模式非交互模式。
phpdbg 的远程功能已经被移除。
在 foreach、var_dump() 、序列化()、对象对比等场景中属性的顺序发生了改变。 现在,属性将根据它们的声明与继承进行排序,在基类中声明的属性将排在子类属性之前。
这个顺序与 zend_object
结构中属性的内部布局保持一致,并且重复了
default_properties_table[]
和 properties_info_table[]
中的顺序。旧的顺序没有被记录下来,是由类的继承实现细节造成的。
FILTER_VALIDATE_INT
过滤器的 FILTER_FLAG_ALLOW_OCTAL
标识现在接受带八进制前缀("0o"
/"0O"
)的八进制字符串。
所有的 GMP 函数现在接受带八进制前缀(
"0o"
/"0O"
)的八进制字符串。
带着 PDO::ATTR_SERVER_INFO
和
PDO::ATTR_SERVER_VERSION
常量的
PDO::getAttribute()
方法现在返回的是值而不是抛出 PDOException 异常。
ReflectionProperty::setAccessible() 和 ReflectionMethod::setAccessible() 将不再起作用。属性和方法现在总被认为是能够通过反射访问的。
syslog() 现在是二进制安全的。
imagewebp() 现在可以通过传递 IMG_WEBP_LOSSLESS
作为质量来实现无损的 WebP 编码了。
这个常量只有在所使用的 libgd 支持无损 WebP 编码的情况在才会被定义。
在连接 libmysqlclient 时,mysqli_stmt::next_result() 和 mysqli::fetch_all() 现在可以使用了。
OpenSSL 扩展 现在至少需要 OpenSSL 1.0.2 版本。
现在已经支持 OpenSSL 3.0 了。请注意许多密码算法(部分老的提供者)不再是默认启用的,以及参数校验(例如:最小秘钥长度)比以前更加严格了。
现在签名的默认算法为 SHA256。
签名算法增加了对 OpenSSL_SHA256 和 OpenSSL_SHA512 的支持。
为安全协议增加了对 SHA256 和 SHA512 的支持。
--with-password-argon2
现在使用 pkg-config 来检测
libargon2。因此现在应该使用 PKG_CONFIG_PATH
来修改 libargon2 的位置。
INI 配置项 log_errors_max_len 已经被移除。从 PHP 8.0.0 开始将不再起作用。
一个在引用字符串中的前置美元符号现在可以被转义:"\${"
将会被解释为内容包含 ${
的字符串。
双引号内的字符串中反斜线现在被更一致地视为转义字符。之前 "foo\\"
的后面如果是除换行之外的其他字符是不被视为一个终止字符串的。现在,它被解释成一个内容为
foo\
的字符串。然而有一个例外的地方是后面跟着换行符的字符串 "foo\"
将继续被视为一个有效的、内容为 "foo\" 的字符串,而不是一个还没有结束的字符串。这个例外的存在是为了天然支持 Windows 文件路径的使用,如
"C:\foo\"
。
官方地址:https://www.php.net/manual/en/migration81.other-changes.php