其他變更

SAPI 模塊的變更

CLI

如果沒有安裝 readline 擴展,使用 -a 選項現(xiàn)在將導致錯誤。在之前,如果沒有 readline 擴展的話 -a 與直接無參數(shù)調(diào)用 php 的表現(xiàn)一樣,除了額外顯示一行 "Interactive mode enabled" 消息。這個模式非交互模式

PHPDBG

phpdbg 的遠程功能已經(jīng)被移除。

函數(shù)的變更

核心

foreach、var_dump() 、序列化()、對象對比等場景中屬性的順序發(fā)生了改變。 現(xiàn)在,屬性將根據(jù)它們的聲明與繼承進行排序,在基類中聲明的屬性將排在子類屬性之前。

這個順序與 zend_object 結(jié)構(gòu)中屬性的內(nèi)部布局保持一致,并且重復了 default_properties_table[]properties_info_table[] 中的順序。舊的順序沒有被記錄下來,是由類的繼承實現(xiàn)細節(jié)造成的。

Filter

FILTER_VALIDATE_INT 過濾器的 FILTER_FLAG_ALLOW_OCTAL 標識現(xiàn)在接受帶八進制前綴("0o"/"0O")的八進制字符串。

GMP

所有的 GMP 函數(shù)現(xiàn)在接受帶八進制前綴( "0o"/"0O")的八進制字符串。

PDO ODBC

帶著 PDO::ATTR_SERVER_INFOPDO::ATTR_SERVER_VERSION 常量的 PDO::getAttribute() 方法現(xiàn)在返回的是值而不是拋出 PDOException 異常。

Reflection

ReflectionProperty::setAccessible()ReflectionMethod::setAccessible() 將不再起作用。屬性和方法現(xiàn)在總被認為是能夠通過反射訪問的。

常規(guī)

syslog() 現(xiàn)在是二進制安全的。

其他擴展變更

GD

imagewebp() 現(xiàn)在可以通過傳遞 IMG_WEBP_LOSSLESS 作為質(zhì)量來實現(xiàn)無損的 WebP 編碼了。

這個常量只有在所使用的 libgd 支持無損 WebP 編碼的情況在才會被定義。

MySQLi

在連接 libmysqlclient 時,mysqli_stmt::next_result()mysqli::fetch_all() 現(xiàn)在可以使用了。

OpenSSL

  • OpenSSL 擴展 現(xiàn)在至少需要 OpenSSL 1.0.2 版本。

  • 現(xiàn)在已經(jīng)支持 OpenSSL 3.0 了。請注意許多密碼算法(部分老的提供者)不再是默認啟用的,以及參數(shù)校驗(例如:最小秘鑰長度)比以前更加嚴格了。

Phar

  • 現(xiàn)在簽名的默認算法為 SHA256。

  • 簽名算法增加了對 OpenSSL_SHA256 和 OpenSSL_SHA512 的支持。

SNMP

  • 為安全協(xié)議增加了對 SHA256 和 SHA512 的支持。

常規(guī)

--with-password-argon2 現(xiàn)在使用 pkg-config 來檢測 libargon2。因此現(xiàn)在應該使用 PKG_CONFIG_PATH 來修改 libargon2 的位置。

INI 文件處理的變化

  • INI 配置項 log_errors_max_len 已經(jīng)被移除。從 PHP 8.0.0 開始將不再起作用。

  • 一個在引用字符串中的前置美元符號現(xiàn)在可以被轉(zhuǎn)義:"\${" 將會被解釋為內(nèi)容包含 ${ 的字符串。

  • 雙引號內(nèi)的字符串中反斜線現(xiàn)在被更一致地視為轉(zhuǎn)義字符。之前 "foo\\" 的后面如果是除換行之外的其他字符是不被視為一個終止字符串的?,F(xiàn)在,它被解釋成一個內(nèi)容為 foo\的字符串。然而有一個例外的地方是后面跟著換行符的字符串 "foo\" 將繼續(xù)被視為一個有效的、內(nèi)容為 "foo\" 的字符串,而不是一個還沒有結(jié)束的字符串。這個例外的存在是為了天然支持 Windows 文件路徑的使用,如 "C:\foo\"。