补充:不向后兼容的变更
Last updated
Was this helpful?
Last updated
Was this helpful?
参考:
在过去如果我们调用一个用户定义的函数时,提供的参数不足,那么将会产生一个警告(warning)。 现在,这个警告被提升为一个错误异常(Error exception)。这个变更仅对用户定义的函数生效, 并不包含内置函数。例如:
Output of the above example in PHP 5.5:
对某些函数的动态调用被禁止(以$func()
或array_map('extract', ...)
等形式)。这些函数可以检查或修改另一个范围,并呈现出模糊和不可靠的行为。其职能如下:
- 用一个字符串作为第一个参数
- 有一个参数
- 有一个参数
以上例程会输出:
以下名称不能用于名称类、接口或特征:
void
iterable
数值操作和数值转换现在要尊重科学符号。这还包括(int)cast操作,以及以下函数:intval()(在这里的基础是10)、settype()、decbin()、decbin()和dechex()。
mt_rand()现在默认使用Mersenne Twister算法的固定版本。如果依赖于mt_srand()的确定性输出,则MT_RAND_PHP有能力将旧的(不正确的)实现通过另一个可选的第二个参数来保存mt_srand()。
rand()和srand()现在分别对mt_rand()和mt_srand()进行了别名。这意味着下列函数的输出有更改:rand()、shuffle()、str_shuffle()和array_rand()。
ASCII删除控制字符(0x7F)不能再用在没有引用的标识符中。
如果将error_log ini设置设置为syslog,则将PHP错误级别映射到syslog错误级别。这将在错误日志中提供更细的差异,与前面的方法相反,所有的错误都只在通知级别上记录。
在不完整的对象上不再调用析构方法
析构方法在一个不完整的对象(例如在构造方法中抛出一个异常)上将不再会被调用。
对字符串使用一个空索引操作符(例如$str[] = $x)将会抛出一个致命错误, 而不是静默地将其转为一个数组。
下列ini配置项已经被移除:
session.entropy_file
session.entropy_length
session.hash_function
session.hash_bits_per_character
数组中元素的顺序已经发生了变化,当这些元素通过引用被引用的赋值自动创建时。例如:
Output of the above example in PHP 7.0:
array(2) {
Output of the above example in PHP 7.1:
内部排序算法得到了改进,其结果可能是不同的元素顺序,比之前的相等。
不要依赖于元素的顺序,因为元素的顺序是相等的;它可能随时变化。
The error message for E_RECOVERABLE errors has been changed from "Catchable fatal error" to "Recoverable fatal error".
$options
参数unserialize()的$options
参数的allowed_classes元素现在被严格输入,即如果给定数组或布尔值之外的其他任何东西,unserialize()将返回FALSE并发出E_WARNING。
通过使用构造绑定到闭包的变量不能使用与任何超全局变量相同的名称,$ this或任何参数。例如,所有这些函数定义都会导致一个致命错误:
在编码双精度时,serialize_precision ini设置现在控制序列化精度。
现在解码一个空的键会导致一个空的属性名,而不是一个属性名。
以上例程的输出类似于:
如果没有匹配,则将把第三个参数设置为mb_ereg()和mb_eregi()函数(regs),现在将被设置为空数组。Formely,参数不会被修改。
sslv2流现在已经在OpenSSL中被删除了。
现在在调用一个以引用作为参数的函数时将始终失败。
和不变现在正确地融合了从当前时间构建的微秒,无论是显式的还是相对的字符串。“下个月的第一天”)。这意味着对两个新创建的实例进行简单的比较,现在更有可能返回FALSE而不是TRUE:
详见: ,搜索:Fatal errors toErrorexceptions conversions
当向提供JSON_UNESCAPED_UNICODE标志时,现在转义了U + 2028和U + 2029的序列。