先前,number_format() 函式有可能回傳 -0
。雖然根據 IEEE 754 浮點數規範,這是完全有效的,但這種特殊情況對於以人類可讀的格式顯示格式化數字來說並不可取。
<?php
var_dump(number_format(-0.01)); // 現在輸出 string(1) "0",而不是 string(2) "-0"
現在,在將陣列轉型為物件以及將物件轉型為陣列時(透過明確轉型或使用 settype()),數字鍵的處理方式得到了改進。
這意味著從轉型為物件的陣列中的整數(或字串形式的整數)鍵現在可以被存取
<?php
// 陣列轉物件
$arr = [0 => 1];
$obj = (object) $arr;
var_dump(
$obj,
$obj->{'0'}, // 現在可以存取
$obj->{0} // 現在可以存取
);
上述範例將輸出
object(stdClass)#1 (1) { ["0"]=> // string key now, rather than integer key int(1) } int(1) int(1)
而從轉型為陣列的物件中的整數(或字串形式的整數)鍵現在可以被存取
<?php
// 物件轉陣列
$obj = new class {
public function __construct()
{
$this->{0} = 1;
}
};
$arr = (array) $obj;
var_dump(
$arr,
$arr[0], // 現在可以存取
$arr['0'] // 現在可以存取
);
上述範例將輸出
array(1) { [0]=> // integer key now, rather than string key int(1) } int(1) int(1)
null
傳遞給 get_class()先前,將 null
傳遞給 get_class() 函式會輸出外層類別的名稱。現在已移除此行為,改為輸出 E_WARNING
警告。要達到與先前相同的行為,只需省略該參數即可。
現在,嘗試對不可計數的類型使用 count() 函式 (包含其別名 sizeof() 函式) 時,將會發出 E_WARNING
警告。
<?php
var_dump(
count(null), // NULL 不可計數
count(1), // 整數不可計數
count('abc'), // 字串不可計數
count(new stdClass), // 未實作 Countable 介面的物件不可計數
count([1,2]) // 陣列可計數
);
上述範例將輸出
Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d Warning: count(): Parameter must be an array or an object that implements Countable in %s on line %d int(0) int(1) int(1) int(1) int(2)
作為長期從資源遷移的一部分,雜湊 (Hash) 擴充功能已更新為使用物件而非資源。 除了需要將 is_resource() 檢查更新為 is_object() 之外,此變更對 PHP 開發人員來說應該是無縫的。
已對預設值進行以下變更
tls://
現在預設為 TLSv1.0 或 TLSv1.1 或 TLSv1.2
ssl://
是 tls://
的別名
STREAM_CRYPTO_METHOD_TLS_*
常數預設為 TLSv1.0 或 TLSv1.1 + TLSv1.2,而不是僅 TLSv1.0
先前,在已關閉的資源上使用 gettype() 會回傳字串 "unknown type"
(未知類型)。 現在,將回傳字串 "resource (closed)"
(資源 (已關閉))。
先前,在 __PHP_Incomplete_Class 類別上使用 is_object() 會回傳 false
。 現在,將回傳 true
。
官方支援的最低 Windows 版本現在是 Windows 7/Server 2008 R2。
trait 預設屬性值的相容性檢查將不再執行類型轉換。
object
object
名稱先前在 PHP 7.0 中是軟保留的。 現在是硬保留的,禁止將其用作類別、trait 或介面名稱。
現在已移除 NetWare 支援。
SORT_STRING
的 array_unique()當 array_unique() 搭配 SORT_STRING
使用時,先前會複製陣列並移除不唯一的元素(之後不壓縮陣列),現在則會透過添加唯一元素來建立新的陣列。這可能導致不同的數字索引。
bcmod() 函式不再將小數截斷為整數。因此,它的行為現在遵循 fmod(),而不是 %
運算子。例如,bcmod('4', '3.5')
現在返回 0.5
而不是 1
。
hash_hmac()、hash_hmac_file()、hash_pbkdf2() 和 hash_init()(搭配 HASH_HMAC
使用)函式不再接受非加密雜湊。
如果第二個參數 (assoc) 為 null
,現在會使用 json_decode() 函式的選項 JSON_OBJECT_AS_ARRAY
。先前,JSON_OBJECT_AS_ARRAY
總是被忽略。
在 64 位元機器上,由 rand() 和 mt_rand() 針對特定種子生成的序列可能與 PHP 7.1 不同(因為修正了實作中的一個模數偏差錯誤)。
sql.safe_mode
ini 設定sql.safe_mode
ini 設定已被移除。
由 date_parse() 和 date_parse_from_format() 返回的陣列中的 zone
元素現在代表秒數而不是分鐘數,並且其符號已反轉。例如,-120
現在是 7200
。
從 PHP 7.2.34 開始,基於安全考量,傳入 Cookie 的*名稱*不再進行 URL 解碼。