尽管大多数现有的 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 字面量 true
、false
和 null
的非小写变体,这符合 JSON 规范,并相应地设置 json_last_error()。以前,仅包含这些值之一的大写或混合大小写形式的 json_decode() 输入会被接受。
此更改只会影响将无效 JSON 传递给 json_decode() 的情况:有效的 JSON 输入不受影响,并将继续正常解析。
所有加密的客户端流现在默认启用对等验证。默认情况下,这将使用 OpenSSL 的默认 CA 捆绑包来验证对等证书。在大多数情况下,无需进行任何更改即可与具有有效 SSL 证书的服务器通信,因为发行版通常将 OpenSSL 配置为使用已知的良好 CA 捆绑包。
可以通过设置 openssl.cafile 或 openssl.capath 配置设置在全局范围内覆盖默认的 CA 捆绑包,或者通过使用 cafile
或 capath
上下文选项在每个请求的基础上覆盖。
虽然通常不建议这样做,但可以通过将 verify_peer
上下文选项设置为 false
来禁用请求的对等证书验证,并通过将 verify_peer_name
上下文选项设置为 false
来禁用对等名称验证。
GMP 资源现在是对象。GMP 扩展中实现的功能 API 没有更改,代码应该可以无修改地运行,除非它使用 is_resource() 或类似方法显式检查资源。
mcrypt_encrypt()、mcrypt_decrypt()、mcrypt_cbc()、mcrypt_cfb()、mcrypt_ecb()、mcrypt_generic() 和 mcrypt_ofb() 将不再接受大小错误的密钥或 IV,并且需要 IV 的块密码模式在未提供 IV 时将失败。