向后不兼容的更改
传递函数参数过少时抛出异常
以前,如果用户定义函数的参数过少,则会发出警告。现在,此警告已提升为 Error 异常。此更改仅适用于用户定义函数,不适用于内部函数。例如
禁止对作用域内省函数进行动态调用
某些函数的动态调用已被禁止(以 $func()
或 array_map('extract', ...)
等形式)。这些函数要么检查或修改另一个作用域,要么存在模棱两可且不可靠的行为。这些函数如下
无效的类、接口和 trait 名称
以下名称不能用于命名类、接口或 trait
不允许在标识符中使用 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 错误的错误消息已从“Catchable fatal error”更改为“Recoverable fatal error”。
词法绑定的变量不能重用名称
通过 use
结构绑定到 闭包 的变量不能使用与任何 超级全局变量、$this 或任何参数相同的名称。例如,所有这些函数定义都将导致致命错误。
放弃对 sslv2 流的支持
sslv2 流现在已在 OpenSSL 中删除。
在编译时禁止已键入返回的“return; ”
在声明返回类型的函数中,不带参数的 return 语句现在会触发 E_COMPILE_ERROR
(除非返回类型声明为 void),即使永远不会到达 return 语句。