以前,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 扩展已更新为使用对象而不是资源。除了进行 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
以前,在 __PHP_Incomplete_Class 类上使用 is_object() 将返回 false
。现在,将返回 true
。
现在,正式支持的 Windows 最低版本是 Windows 7/Server 2008 R2。
对默认特性属性值的兼容性检查将不再执行强制转换。
object
用于类名object
名称以前在 PHP 7.0 中是软保留的。现在它是硬保留的,禁止将其用作类、特性或接口名称。
现在已删除对 NetWare 的支持。
SORT_STRING
虽然以前使用 SORT_STRING
的 array_unique() 会复制数组并删除非唯一元素(之后不会打包数组),但现在通过添加唯一元素来构建一个新数组。这可能会导致不同的数字索引。
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
总是被忽略。
sql.safe_mode
ini 设置现在已删除 sql.safe_mode
ini 设置。
由 date_parse() 和 date_parse_from_format() 返回的数组中的 zone
元素现在表示秒而不是分钟,并且其符号已反转。例如,-120
现在是 7200
。
从 PHP 7.2.34 开始,出于安全原因,传入的 Cookie 的名称不再进行 URL 解码。