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() 的選用跳過參數現在位於末尾,與 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 編譯。所有 mysqlnd 中無法使用的 libmysql 功能都已移除。
MYSQLI_IS_MARIADB
已被棄用。現在所需的最低 Oracle Client 程式庫版本為 11.2。
現在支援模式字串中的 NUL 字元 (\0
)。
在工作階段處於活動狀態或已發送輸出時嘗試更改 session.cookie_samesite INI 指令現在將會失敗並發出警告。這使行為與所有其他工作階段 INI 設定一致。
getimagesize() 現在會回報 AVIF 影像的實際影像尺寸、位元數和通道數。先前,尺寸回報為 0x0,且位元數和通道數根本沒有回報。
Zip 擴展已更新至 1.20.0 版,新增了以下方法:
已新增二進位 (0b
/0B
) 和八進位 (0o
/0O
) 前綴支援整數 INI 設定。以零 (0
) 開頭的整數 INI 設定將繼續被解釋為八進位整數。
解析某些格式錯誤的值現在會觸發警告,而之前這些值會被忽略。為了向後相容,這些值的解釋方式沒有改變。這會影響以下設定: