iterable 类型现在是 array|Traversable 的内置编译时别名。因此,与 iterable
相关的错误消息现在将使用 array|Traversable
。类型反射对于单个 iterable
(和 ?iterable
)保留,以生成一个名为 iterable
的 ReflectionNamedType,但是联合类型中使用 iterable
将转换为 array|Traversable
。
发送的 cookie 的日期格式现在是 'D, d M Y H:i:s \G\M\T'
;之前是 'D, d-M-Y H:i:s T'
。
STDOUT、STDERR 和 STDIN 流在资源销毁时不再关闭,这主要是在 CLI 完成时发生的。但是,仍然可以使用 fclose() 等函数显式关闭这些流。
strcmp()、strcasecmp()、strncmp()、strncasecmp() 和 substr_compare() 函数使用二进制安全字符串比较不再保证在字符串长度不相等时返回 strlen($string1) - strlen($string2)
,但现在可能返回 -1
或 1
。不要依赖于任何具体的值,而是将返回值与 0
进行比较。
dba_open() 和 dba_popen() 现在具有以下强制签名
$path
,$mode
,$handler
= null
,$permission
= 0644,$map_size
= 0,$flags
= null
dba_fetch() 的可选 skip 参数现在位于末尾,与 PHP 用户区语义一致。它的签名现在是
重载签名仍然被接受,但建议使用新的标准变体。random_bytes() 和 random_int() 现在在 CSPRNG 失败时抛出 \Random\RandomException。之前抛出的是普通的 \Exception。
iterator_to_array() 和 iterator_count() 的 iterator
参数从 Iterator 扩展到 iterable,允许传递数组。
DatePeriod 的属性现在已正确声明。
IntlBreakIterator、IntlRuleBasedBreakIterator、IntlCodePointBreakIterator、IntlPartsIterator、IntlCalendar、Collator、IntlIterator、UConverter、IntlDateFormatter、IntlDatePatternGenerator、MessageFormatter、ResourceBundle、Spoofchecker、IntlTimeZone 和 Transliterator 的实例不再可序列化。之前,它们可以被序列化,但反序列化会产生不可用的对象或失败。
对 libmysql 的支持已被移除,并且不再可能使用 libmysql 编译 mysqli。从现在起,mysqli 扩展只能使用 mysqlnd 进行编译。所有 libmysql 中不可用的功能都已被移除
MYSQLI_IS_MARIADB
常量已弃用现在所需的 Oracle 客户端库的最低版本为 11.2。
现在支持模式字符串中的 NUL 字符 (\0
)。
在会话处于活动状态或已发送输出时尝试更改 session.cookie_samesite INI 指令现在将失败并发出警告。这使行为与所有其他会话 INI 设置保持一致。
sqlite3.defensive 现在是 INI_USER
。
getimagesize() 现在报告 AVIF 图像的实际图像尺寸、位和通道。之前,尺寸报告为 0x0,位和通道根本没有报告。
Zip 扩展已更新至版本 1.20.0,添加了以下方法
对整数 INI 设置添加了对二进制 (0b
/0B
) 和八进制 (0o
/0O
) 前缀的支持。以零 (0
) 开头的整数 INI 设置将继续解释为八进制整数。
解析某些格式错误的值现在将触发警告,而之前会静默忽略。为了向后兼容,对这些值的解释没有改变。这会影响以下设置