向后不兼容的更改

尽管大多数现有的 PHP 5 代码应该无需更改即可工作,但请注意一些向后不兼容的更改

通过数组文字将数组定义为类的属性时,不会覆盖数组键

以前,如果显式键与顺序隐式键相同,则声明为类属性的数组(混合了显式键和隐式键)可能会静默覆盖数组元素。例如

<?php
class C {
const
ONE = 1;
public
$array = [
self::ONE => 'foo',
'bar',
'quux',
];
}

var_dump((new C)->array);
?>

上述示例在 PHP 5.5 中的输出

array(2) {
  [0]=>
  string(3) "bar"
  [1]=>
  string(4) "quux"
}

上述示例在 PHP 5.6 中的输出

array(3) {
  [1]=>
  string(3) "foo"
  [2]=>
  string(3) "bar"
  [3]=>
  string(4) "quux"
}

json_decode() 严格性

json_decode() 现在始终拒绝 JSON 文字 truefalsenull 的非小写变体,符合 JSON 规范,并相应地设置 json_last_error()。以前,对 json_decode() 的输入仅包含其中一个值(大写或混合大小写)是可以接受的。

此更改只会影响将无效 JSON 传递给 json_decode() 的情况:有效的 JSON 输入不受影响,并将继续正常解析。

流包装器现在在使用 SSL/TLS 时默认验证对等证书和主机名

所有加密的客户端流现在默认启用对等验证。默认情况下,这将使用 OpenSSL 的默认 CA 捆绑包来验证对等证书。在大多数情况下,无需进行任何更改即可与具有有效 SSL 证书的服务器通信,因为发行版通常配置 OpenSSL 使用已知的良好 CA 捆绑包。

可以通过设置 openssl.cafile 或 openssl.capath 配置设置在全局范围内覆盖默认 CA 捆绑包,或者可以通过使用 cafilecapath 上下文选项在每个请求的基础上覆盖默认 CA 捆绑包。

虽然通常不建议,但可以通过将 verify_peer 上下文选项设置为 false 来禁用对等证书验证,并通过将 verify_peer_name 上下文选项设置为 false 来禁用对等名称验证。

GMP 资源现在是对象

GMP 资源现在是对象。GMP 扩展中实现的功能性 API 没有改变,代码应该能够无修改地运行,除非它使用 is_resource() 或类似方法显式检查资源。

Mcrypt 函数现在需要有效的密钥和 IV

mcrypt_encrypt()mcrypt_decrypt()mcrypt_cbc()mcrypt_cfb()mcrypt_ecb()mcrypt_generic()mcrypt_ofb() 将不再接受大小不正确的密钥或 IV,并且需要 IV 的分组密码模式现在将在没有提供 IV 的情况下失败。

cURL 文件上传

使用 @file 语法上传现在需要将 CURLOPT_SAFE_UPLOAD 设置为 false。应使用 CURLFile 代替。

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top