閉包名稱已調整為包含父函式的名稱和定義行數,以便更容易區分,例如在堆疊追蹤中。
現在允許在解構函式執行期間切換纖程。先前由於與垃圾回收的衝突而被阻止。
解構函式現在可以在單獨的纖程中執行
當 Fiber 中的垃圾回收被觸發時,由 GC 呼叫的解構函式會在一個獨立的 Fiber 中執行:gc_destructor_fiber。如果這個 Fiber 暫停,則會建立一個新的 Fiber 來執行剩餘的解構函式。先前的 gc_destructor_fiber 不再被 GC 引用,如果它沒有在其他地方被引用,則可能會被回收。解構函式被暫停的物件將不會被回收,直到解構函式返回或 Fiber 被回收。
傳遞給 ob_start() 的 flags
參數的輸出處理器狀態旗標現在已被清除。
output_add_rewrite_var() 現在使用 url_rewriter.hosts
而不是 session.trans_sid_hosts
來選擇要重寫的主機。
已移除對 EOL Apache 2.0 和 2.2 的支援。現在最低需要的 Apache 版本為 2.4。
如果指定的檔案找不到,內建伺服器現在會透過遍歷父目錄遞迴搜尋索引檔案。如果路徑看起來像是在參考一個檔案,也就是說,如果最後一個路徑組件包含一個句點,則先前會跳過此程序。在這種情況下,會返回 404 錯誤。現在已將行為更改為在所有情況下都搜尋索引檔案。
現在可以在沒有主體的情況下成功清空標頭。
狀態頁面新增了一個欄位來顯示記憶體峰值。
Solaris/Illumos 的 /dev/poll events.mechanism
設定已停用。
trigger_error() 和 user_error() 現在的返回類型為 true 而不是 bool。
DOMDocument::registerNodeClass() 現在的暫定返回類型為 true 而不是 bool。實際上它只能返回 true
。
hash_update() 現在的暫定返回類型為 true 而不是 bool。實際上它只能返回 true
。
已新增 NumberFormatter::ROUND_TOWARD_ZERO
和 NumberFormatter::ROUND_AWAY_FROM_ZERO
作為 NumberFormatter::ROUND_DOWN
和 NumberFormatter::ROUND_UP
的別名,以便與新的 PHP_ROUND_*
模式保持一致。
ResourceBundle::get() 現在的暫定返回類型為 ResourceBundle|array|string|int|null
。
idn_to_ascii() 和 idn_to_utf8() 函式現在如果 domain
名稱是空的或太長,都會拋出 ValueError 例外。
idn_to_ascii() 和 idn_to_utf8() 函式現在如果 variant
參數不是 INTL_IDNA_VARIANT_UTS46
,都會拋出 ValueError 例外。
當傳入非串流上下文資源時,libxml_set_streams_context() 現在會立即拋出 TypeError 例外,而不是在稍後使用串流上下文時才拋出。
mb_strcut() 對於無效的 UTF-8 和 UTF-16 字串的行為現在更加一致。對於有效的 UTF-8 和 UTF-16 字串,沒有行為上的改變。
odbc_fetch_object()、odbc_fetch_array() 和 odbc_fetch_into() 的 row
參數現在的預設值為 null
,與 odbc_fetch_row() 一致。先前的預設值分別為 -1
、-1
和 0
。
openssl_csr_new() 中的 extra_attributes
現在設定的是 CSR 屬性,而不是像之前錯誤設定的主體 DN。
openssl_csr_new() 中的 dn
允許為單個項目設定一個 陣列 的值。
openssl_csr_sign() 新增了 serial_hex
參數,允許以十六進位格式設定序號。
如果使用 OpenSSL 3.2 以下版本,且省略了秒數,則使用 openssl_x509_parse() 解析 ASN.1 UTCTime 會失敗(此類欄位會返回 -1
)。OpenSSL 3.3 以上版本已經不載入此類憑證。
現在可以使用 PDO::getAttribute() 來取得 PDO::ATTR_STRINGIFY_FETCHES
屬性的值。
新增了 PDO::PGSQL_ATTR_RESULT_MEMORY_SIZE
,可以用於支援它的驅動程式,透過 PDO::getAttribute() 擷取查詢結果的記憶體使用量。
現在可以使用 PDO::getAttribute() 來取得 FB_ATTR_DATE_FORMAT
、FB_ATTR_TIME_FORMAT
、FB_ATTR_TIMESTAMP_FORMAT
屬性的值。
新增了指定交易隔離層級和存取模式的新屬性。新增了五個與此功能相關的常數:
Pdo\Firebird::TRANSACTION_ISOLATION_LEVEL
Pdo\Firebird::READ_COMMITTED
Pdo\Firebird::REPEATABLE_READ
Pdo\Firebird::SERIALIZABLE
Pdo\Firebird::WRITABLE_TRANSACTION
使用持續連線時,建構函式中現在會進行活躍度檢查。
根據 ibase.h 中 FB_API_VER
的值,所建置的內容會有所不同。現在可以使用新的靜態方法 Pdo\Firebird::getApiVersion() 來獲取此資訊。此資訊現在也會在 phpinfo() 中顯示。
現在可以使用五種新的資料類型:INT128
、DEC16
、DEC34
、TIMESTAMP_TZ
、TIME_TZ
。這些類型從 Firebird 4.0 開始提供。
現在可以使用 PDO::getAttribute() 來獲取 PDO::ATTR_FETCH_TABLE_NAMES
屬性的值。
支援透過 PDO::PGSQL_ATTR_RESULT_MEMORY_SIZE
擷取查詢的記憶體使用量。
pg_select() 的 conditions
參數現在是可選的,並且接受空陣列。
Phar::setAlias()、Phar::setDefaultStub() 方法現在的暫定返回類型為 true,而不是 bool。
當檔案描述符/串流引數無效時,posix_isatty() 現在會設定錯誤號碼。
現在可以在產生器執行完成後呼叫 ReflectionGenerator::getFunction()。
socket_create_listen() 的 backlog
參數現在的預設值為 SOMAXCONN
。先前為 128
。
sodium_crypto_aead_aes256gcm_()* 函數現在可在具有 ARM 加密擴充功能的 aarch64 CPU 上使用。
SplPriorityQueue::insert()、SplPriorityQueue::recoverFromCorruption()、SplHeap::insert()、SplHeap::recoverFromCorruption() 方法現在的暫定返回類型為 true,而不是 bool。
password_hash() 中,PASSWORD_BCRYPT
雜湊演算法的預設 'cost'
值已從 10
增加到 12
。
debug_zval_dump() 現在會顯示陣列是否已壓縮。
long2ip() 的回傳值類型現在是 字串,而不是 string|false
。
highlight_string() 的回傳值類型現在是 字串|true,而不是 string|bool
。
print_r() 的回傳值類型現在是 字串|true,而不是 string|bool
。
round() 函式的 mode
參數已擴展為 RoundingMode|int
,可接受新的 RoundingMode 列舉類型的實例。
round() 函式新增了四種新的模式:RoundingMode::PositiveInfinity、RoundingMode::NegativeInfinity、RoundingMode::TowardsZero、RoundingMode::AwayFromZero
將數值四捨五入到整數的內部實作已重寫,以便更容易驗證正確性並更容易維護。由於重寫,一些四捨五入的錯誤已得到修正。例如,以前將 0.49999999999999994
四捨五入到最接近的整數會得到 1.0
,而不是正確的結果 0.0
。其他輸入值也可能受到影響,並產生與早期 PHP 版本不同的輸出。
修正了由 round() 函式的「預先四捨五入」所造成的錯誤。先前,使用「預先四捨五入」將 0.285
(實際上是 0.28499999999999998
)之類的值視為小數並將其四捨五入到 0.29
。「預先四捨五入」會錯誤地對某些數字進行四捨五入,因此此修正移除了「預先四捨五入」並更改了數字的比較方式,以便將值正確地四捨五入為小數。
round() 可處理的最大精度已擴展一位數。例如,round(4503599627370495.5)
在先前版本中返回 4503599627370495.5
,但現在返回 4503599627370496
。
現在所需的最低 libcurl 版本為 7.61.0。
CURLOPT_DNS_USE_GLOBAL_CACHE
選項不再有任何作用,並且會被靜默忽略。此底層功能在 libcurl 7.11.1 中已被棄用,並在 libcurl 7.62.0 中被移除。
現在可以將 GMP 物件轉換為 布林值,而不是發出 E_RECOVERABLE_ERROR
。轉換行為已重載,因此代表值 0
的 GMP 物件會被轉換為 false
。
現在所需的最低 libxml2 版本為 2.9.4。
Intl 類別的行為已標準化,在嘗試使用未初始化的物件或複製失敗時,一律會拋出 Error 例外。
Unicode 資料表已更新至 Unicode 16.0。
支援 MySQL 9 的新 VECTOR 資料類型。
現在所需的最低 OpenSSL 版本為 1.1.1。
現在所需的最低 libpq 版本為 10.0。
現在所需的最低 libpq 版本為 10.0。
在 SplFixedArray 中的越界訪問現在會拋出 OutOfBoundsException 類型的異常,而不是 RuntimeException。由於 OutOfBoundsException 是 RuntimeException 的子類別,因此在嘗試捕捉這些異常時不會表現出行為變化。
現在已宣告型別化屬性 XSLTProcessor::$cloneDocument 和 XSLTProcessor::$doXInclude。
現在所需的最低 zlib 版本為 1.2.11。
在高併發負載下,提升了 ZTS 建置中浮點數解析和格式化的效能。這會影響 printf() 系列函數,以及序列化函數,例如 json_encode() 或 serialize()。
僅使用 %s
和 %d
指定符的 sprintf() 將會被編譯成等效的字串插值,避免函數呼叫的額外開銷和重複解析格式字串。
提升了數字轉換和運算的效能。
在沒有 xpath 查詢的情況下,DOMNode::C14N() 的效能大幅提升。對於具有數萬個節點的文件,這可以輕鬆地將時間縮短兩個數量級。
提升 XML 序列化的效能並減少記憶體消耗。
減少節點類別的記憶體使用量。
將大型檔案上傳的 FTP 上傳效能提升高達 10 倍。
新增了 SHA-256 的 SSE2 和 SHA-NI 實作。這將在支援的 CPU 上提升效能約 1.3 倍 (SSE2) 和 3 倍到 5 倍 (SHA-NI)。感謝 Colin Percival / Tarsnap 的最佳化。
mb_strcut() 現在處理 UTF-8 和 UTF-16 字串的速度更快。
查詢 mbstring 編碼名稱的速度現在更快。
將 SJIS-win 轉換為 Unicode 的效能大幅提升。
提升了 MySQLnd 引號的效能。
提升了命名捕獲群組的效能。
提升了 Random\Randomizer 的效能,特別著重於 Random\Randomizer::getBytes() 和 Random\Randomizer::getBytesFromString() 方法。
提升 XML 序列化的效能並減少記憶體消耗。
strspn() 和 strcspn() 的效能大幅提升。它們現在以線性時間執行,而不是受限於平方時間。
提升了 strpbrk() 的效能。
get_browser() 現在的速度更快,在某些測試案例中提升了 1.5 倍到 2.5 倍。