當使用超過 zend.max_allowed_stack_size-zend.reserved_stack_size 位元組的堆疊時(纖程為 fiber.stack_size-zend.reserved_stack_size),非常接近溢出呼叫堆疊的程式現在可能會拋出 Error。
在 POSIX 系統上,多次執行 proc_get_status() 現在將始終傳回正確的值。先前,只有第一次呼叫該函式才會傳回正確的值。在 proc_get_status() 之後執行 proc_close() 現在也會傳回正確的退出程式碼。先前,這會傳回 -1
。在內部,這會透過快取 POSIX 系統上的結果來運作。如果需要先前的行為,則可以檢查 proc_get_status() 傳回的陣列中的 "cached"
鍵,以檢查結果是否已快取。
Zend 最大執行時間計時器現在預設為 Linux 上的 ZTS 建置啟用。
具有靜態屬性的 trait 的使用現在會重新宣告從父類別繼承的靜態屬性。這會為目前類別建立個別的靜態屬性儲存。這類似於直接將靜態屬性加入類別而不使用 trait。
將負索引 $n 指派給空陣列現在將確保下一個索引為 $n+1
而不是 0
。
從介面繼承時,現在會正確檢查類別常數可見性差異。
如果鍵不是透過 WeakMap 的迭代可以存取(透過迭代的可存取性被視為弱),則鍵對應到自身(可能透過遞移性)的 WeakMap 項目現在可能會在循環收集期間移除。先前,此類項目永遠不會自動移除。
DateTime 擴充已引入 DateError 和 DateException 階層下的日期擴充特定例外與錯誤,而不是警告與一般例外。這改善了錯誤處理,但代價是必須檢查錯誤和例外。
在沒有父節點的節點上呼叫 DOMChildNode::after()、DOMChildNode::before()、DOMChildNode::replaceWith() 現在是不執行任何操作,而不是階層例外,這是 DOM 規格要求的行為。
現在可以使用沒有文件的 DOMParentNode 和 DOMChildNode 方法,而不是拋出 DOM_HIERARCHY_REQUEST_ERR
DOMException。這符合 DOM 規格要求的行為。
在沒有指定前置字元的情況下呼叫 DOMDocument::createAttributeNS() 會錯誤地建立預設命名空間,將元素放置在命名空間內,而不是屬性。這個錯誤現在已修正。
當前置字元已用於不同的 URI 時,DOMDocument::createAttributeNS() 先前會錯誤地拋出 DOM_NAMESPACE_ERRNAMESPACE_ERR
DOMException。當有前置字元名稱衝突時,現在會正確選擇不同的前置字元。
新的方法和屬性已加入某些 DOM 類別。如果使用者空間類別從這些類別繼承並宣告具有相同名稱的方法或屬性,則宣告必須相容。否則,將拋出有關不相容宣告的典型編譯錯誤。如需新實作的方法和屬性清單,請參閱 新功能清單 和 新函式清單。
已移除 opcache.consistency_checks INI 指令。此功能在使用追蹤 JIT 以及繼承快取時已損壞,並且自 PHP 8.1.18 和 PHP 8.2.5 以來已停用,無法啟用。追蹤 JIT 和繼承快取都可能會在腳本持久化之後透過使總和檢查碼失效來修改 shm。嘗試修復跳過了可修改的指標,但由於複雜性而被拒絕。因此,決定移除該功能。
現在已宣告 Phar 類別常數的類型。
range() 函式已進行各種變更
0
作為 $step
時,會拋出更詳細的 ValueError。$step
時,現在會拋出 ValueError。$step
是可以解釋為 int 的浮點數,現在就會這樣做。$start
或 $end
是空字串,現在會發出 E_WARNING
。該值會繼續轉換為值 0
。$start
或 $end
的長度超過一個位元組,則僅在它是非數值字串時才會發出 E_WARNING
。$start
或 $end
被轉換為整數,因為另一個邊界輸入是數字,則現在會發出 E_WARNING
。(例如 range(5, 'z');
)。$step
是浮點數,則現在會發出 E_WARNING
,除非兩個邊界輸入都是數值字串(例如,range('5', '9', 0.5);
不會產生警告)。range('9', 'A');
)。<?php
range('9', 'A'); // 從 PHP 8.3.0 開始,為 ["9", ":", ";", "<", "=", ">", "?", "@", "A"]
range('9', 'A'); // 在 PHP 8.3.0 之前,為 [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
?>
number_format() 現在會透過將 $num
四捨五入到小數點前 abs($decimals)
位數來處理負 $decimals
值。先前,負 $decimals
值會被忽略。
file() 旗標錯誤檢查現在會捕捉所有無效旗標。值得注意的是,先前會靜態接受 FILE_APPEND
。
現在已宣告 SNMP 類別常數的類型。