向后不兼容的变更
传递函数参数过少时抛出异常
以前,调用用户定义函数时参数过少会发出警告。现在,此警告已提升为 Error 异常。此更改仅适用于用户定义函数,不适用于内部函数。例如
禁止对范围自省函数进行动态调用
禁止对某些函数进行动态调用(以 $func()
或 array_map('extract', ...)
等形式)。这些函数要么检查或修改另一个作用域,要么表现出模棱两可且不可靠的行为。这些函数如下
无效的类、接口和特征名称
以下名称不能用于命名类、接口或特征
禁止在标识符中使用 ASCII 删除控制字符
ASCII 删除控制字符 (0x7F
) 不能再用于未引用的标识符中。
error_log
随 syslog
值的变化而变化
如果 error_log
ini 设置设置为 syslog
,则 PHP 错误级别将映射到 syslog 错误级别。这与以前的方法相比,在错误日志中带来了更细微的差异,以前所有错误都仅以 notice 级别记录。
不要对不完整的对象调用析构函数
现在,永远不会对在执行构造函数期间抛出异常的对象调用析构函数。在以前的版本中,此行为取决于对象是否在构造函数之外被引用(例如,通过异常回溯)。
空索引运算符不再支持字符串
对字符串应用空索引运算符(例如 $str[] = $x
)会抛出致命错误,而不是静默转换为数组。
通过字符串索引访问对空字符串的赋值
通过字符对空字符串进行字符串修改现在与非空字符串类似,即写入超出范围的偏移量会在字符串中填充空格,其中非整型类型将转换为整型,并且仅使用分配字符串的第一个字符。以前,空字符串被静默地视为空数组。
已删除的 ini 指令
已删除以下 ini 指令
-
session.entropy_file
-
session.entropy_length
-
session.hash_function
-
session.hash_bits_per_character
通过引用赋值时自动创建元素的数组排序已更改
当通过引用赋值自动创建这些元素时,数组中元素的顺序已更改。例如
相等元素的排序顺序
内部排序算法已改进,这可能会导致与以前相比,比较结果相等的元素的排序顺序不同。
注意:
不要依赖于比较结果相等的元素的顺序;它可能会随时更改。
E_RECOVERABLE 错误的错误消息
E_RECOVERABLE 错误的错误消息已从“可捕获的致命错误”更改为“可恢复的致命错误”。
词法绑定的变量不能重用名称
通过 use
结构绑定到 闭包 的变量不能使用与任何 超全局变量、$this 或任何参数相同的名称。例如,所有这些函数定义都将导致致命错误
删除对 sslv2 流的支持
sslv2 流现已从 OpenSSL 中删除。
禁止在编译时已经存在类型化返回值的情况下使用 "return;"
声明了返回值类型的函数中没有参数的 return 语句现在将触发 E_COMPILE_ERROR
(除非返回值类型声明为 void),即使 return 语句永远不会被执行。