以前,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() 不可计算类型时,现在将发出 E_WARNING
(这包括 sizeof() 别名函数)。
<?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 扩展已更新为使用对象而不是资源。对于 PHP 开发人员来说,此更改应该是无缝的,除非已进行 is_resource() 检查(需要更新为 is_object())。
已对默认值进行了以下更改
tls://
现在默认为 TLSv1.0 或 TLSv1.1 或 TLSv1.2
ssl://
是 tls://
的别名
STREAM_CRYPTO_METHOD_TLS_*
常量默认为 TLSv1.0 或 TLSv1.1 + TLSv1.2,而不是仅 TLSv1.0
以前,在 __PHP_Incomplete_Class 类上使用 is_object() 会返回 false
。现在,将返回 true
。
现在,正式支持的最低 Windows 版本为 Windows 7/Server 2008 R2。
对默认特征属性值的兼容性检查将不再执行强制转换。
object
用于类名object
名称以前在 PHP 7.0 中是软保留的。现在是硬保留的,禁止将其用作类、特征或接口名称。
现在已删除对 NetWare 的支持。
SORT_STRING
虽然 array_unique() 以前与 SORT_STRING
一起复制数组并删除非唯一元素(之后没有打包数组),但现在通过添加唯一元素来构建一个新数组。这可能导致不同的数字索引。
hash_hmac()、hash_hmac_file()、hash_pbkdf2() 和 hash_init()(使用 HASH_HMAC
)函数不再接受非加密哈希。
json_decode() 函数选项 JSON_OBJECT_AS_ARRAY
现在在第二个参数 (assoc) 为 null
时使用。以前,始终忽略 JSON_OBJECT_AS_ARRAY
。
sql.safe_mode
ini 设置sql.safe_mode
ini 设置现已移除。
由 date_parse() 和 date_parse_from_format() 返回的数组中的 zone
元素现在表示秒而不是分钟,并且其符号已反转。例如 -120
现在是 7200
。
从 PHP 7.2.34 开始,出于安全原因,传入的 Cookie 的 *名称* 将不再进行 URL 解码。