現(xiàn)在訪問(wèn) $GLOBALS 數(shù)組受到一些限制。
對(duì)單個(gè)數(shù)組元素的讀寫訪問(wèn) $GLOBALS['var']
與之前一樣。
也將繼續(xù)支持對(duì)整個(gè)數(shù)組 $GLOBALS 的只讀訪問(wèn)。
但是,不再支持對(duì)整個(gè) $GLOBALS 數(shù)組的寫訪問(wèn)。
例如,array_pop($GLOBALS)
將返回錯(cuò)誤。
當(dāng)一個(gè)方法使用繼承的(而不是重寫的)靜態(tài)變量時(shí),繼承的方法將與父級(jí)共享這個(gè)靜態(tài)變量。
<?php
class A {
public static function counter() {
static $counter = 0;
$counter++;
return $counter;
}
}
class B extends A {}
var_dump(A::counter()); // int(1)
var_dump(A::counter()); // int(2)
var_dump(B::counter()); // int(3),之前是 int(1)
var_dump(B::counter()); // int(4),之前是 int(2)
?>
大多數(shù)非 Final 的內(nèi)部方法現(xiàn)在要求重寫方法聲明一個(gè)可兼容的返回類型,否則在繼承時(shí)會(huì)給出方法廢棄的提示。
如果由于 PHP 跨版本兼容性的問(wèn)題,導(dǎo)致不能為重寫方法聲明返回類型,則可以添加 #[ReturnTypeWillChange]
注解來(lái)取消廢棄提示。
現(xiàn)在 readonly
是一個(gè)關(guān)鍵詞。不過(guò),它仍然可以被用作函數(shù)名。
一些 資源(resource) 類型已被遷移到 object 類型。
要檢查返回值,應(yīng)該從 is_resource() 檢查是否為資源,更改為檢查返回值是否等于 false
。
現(xiàn)在 FileInfo 函數(shù)接收并返回 finfo 對(duì)象類型,
而不是 fileinfo
資源(resource) 類型。
現(xiàn)在 FTP 函數(shù)接收并返回 FTP\Connection 對(duì)象類型,
而不是 ftp
資源(resource) 類型。
現(xiàn)在 IMAP 函數(shù)接收并返回 IMAP\Connection 對(duì)象類型,
而不是 imap
資源(resource) 類型。
現(xiàn)在 LDAP 函數(shù)接收并返回 LDAP\Connection 對(duì)象類型,
而不是 ldap link
資源(resource) 類型。
現(xiàn)在 LDAP 函數(shù)接收并返回 LDAP\Result 對(duì)象類型,
而不是 ldap result
資源(resource) 類型。
現(xiàn)在 LDAP 函數(shù)接收并返回 LDAP\ResultEntry 對(duì)象類型,
而不是 ldap result entry
資源(resource) 類型。
現(xiàn)在 PgSQL 函數(shù)接收并返回 PgSql\Connection 對(duì)象類型,
而不是 pgsql link
資源(resource) 類型。
現(xiàn)在 PgSQL 函數(shù)接收并返回 PgSql\Result 對(duì)象類型,
而不是 pgsql result
資源(resource) 類型。
現(xiàn)在 PgSQL 函數(shù)接收并返回 PgSql\Lob 對(duì)象類型,
而不是 pgsql large object
資源(resource) 類型。
現(xiàn)在 PSpell 函數(shù)接收并返回 PSpell\Dictionary 對(duì)象類型,
而不是 pspell
資源(resource) 類型。
現(xiàn)在 PSpell 函數(shù)接收并返回 PSpell\Config 對(duì)象類型,
而不是 pspell config
資源(resource) 類型。
現(xiàn)在 mysqli_fetch_fields() 和
mysqli_fetch_field_direct() 對(duì)于 max_length 將返回 0
值。
這一信息可以迭代結(jié)果集來(lái)計(jì)算,并獲取最大長(zhǎng)度。這是之前 PHP 內(nèi)部的做法。
常量 MYSQLI_STMT_ATTR_UPDATE_MAX_LENGTH
不再生效。
常量 MYSQLI_STORE_RESULT_COPY_DATA
不再生效。
傳遞給 mysqli::store_result() 的 mode
參數(shù)的所有值不再生效。
現(xiàn)在 mysqli::connect() 成功時(shí)返回 true
而不再返回 null
。
默認(rèn)錯(cuò)誤處理模式已經(jīng)由 silent 變成了 exceptions,更多詳情及如何設(shè)置該屬性請(qǐng)參見(jiàn) MySQLi reporting mode 。
要恢復(fù)之前的行為習(xí)慣,請(qǐng)使用:
mysqli_report(MYSQLI_REPORT_OFF);
現(xiàn)在,擴(kuò)展 mysqli_stmt::execute() 類需要指定額外的可選參數(shù)。
mysqlnd.fetch_data_copy INI 指令已被取消。 這不會(huì)造成用戶可見(jiàn)的變化。
現(xiàn)在 EC 私鑰將以 PKCS#8 格式導(dǎo)出,而非像其他秘鑰那樣的傳統(tǒng)格式。
現(xiàn)在 openssl_pkcs7_encrypt() 和 openssl_cms_encrypt() 將默認(rèn)使用 AES-128-CBC,而非 RC2-40。 RC2-40 加密被認(rèn)為是不安全的,OpenSSL 3 默認(rèn)不啟用。
現(xiàn)在 PDO::ATTR_STRINGIFY_FETCHES
的類型從 bool 變成了字符串 "0"
或
"1"
。之前的 bool 類型沒(méi)有被字符串化。
現(xiàn)在當(dāng) PDO::ATTR_STRINGIFY_FETCHES
被禁用時(shí),
以 PDO::PARAM_LOB
為參數(shù)調(diào)用 PDOStatement::bindColumn() 結(jié)果將總是綁定一個(gè)流。
以前,結(jié)果要么是一個(gè)流,要么是一個(gè)字符串,這取決于所用的數(shù)據(jù)庫(kù)驅(qū)動(dòng)及其執(zhí)行的時(shí)間。
現(xiàn)在,當(dāng)使用模擬預(yù)處理時(shí),結(jié)果集中的整數(shù)及浮點(diǎn)數(shù)將會(huì)以 PHP 原始類型返回,而不是以 string 類型返回。
這與原生的預(yù)處理方式一樣。
之前的行為方式可以通過(guò) PDO::ATTR_STRINGIFY_FETCHES
恢復(fù)。
現(xiàn)在,結(jié)果集中的整數(shù)及浮點(diǎn)數(shù)將會(huì)以 PHP 原始類型返回。
之前的行為方式可以通過(guò) PDO::ATTR_STRINGIFY_FETCHES
恢復(fù)。
為了遵守 ArrayAccess 接口, Phar::offsetUnset() 和 PharData::offsetUnset() 不再以 bool 類型返回。
version_compare() 函數(shù)不再接收未經(jīng)記錄的操作符縮寫。
現(xiàn)在 htmlspecialchars()、
htmlentities()、
htmlspecialchars_decode()、
html_entity_decode()、
get_html_translation_table()
使用 ENT_QUOTES | ENT_SUBSTITUTE
作為默認(rèn)值,而不再是 ENT_COMPAT
。
這意味著 '
被轉(zhuǎn)義為 '
而不像之前那樣不作處理。
此外,有缺陷的 UTF-8 將被 Unicode 替代字符(substitute character)替換,而不是產(chǎn)生一個(gè)空字符串。
現(xiàn)在 debug_zval_dump() 函數(shù)可以打印封裝的引用計(jì)數(shù)了,不僅僅只是打印 &
引用計(jì)數(shù)的值。
這更準(zhǔn)確地模擬了自 PHP 7.0 以來(lái)的引用注解。
現(xiàn)在 debug_zval_dump() 可打印 interned
字符串,而不是 interned 字符串和不可變數(shù)組的虛擬的引用計(jì)數(shù)。
SplFixedArray 將會(huì)像 array 類型一樣被 JSON 編碼。