PHP 5.2允许对象语法调用数组索引?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP 5.2允许对象语法调用数组索引?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我们最近遇到了一场灾难,不得不将 PHP Web应用程序从 PHP Version 5.2.6-1 lenny16移到PHP Version 5.3.3-7 squeeze15,并发现了一个看似非常重要的区别.

在我们的应用程序中,有些实例我们使用对象语法错误调用了数组的索引:

echo $array->index;

但是,5.2.6似乎原谅了这一点,并正确地将其视为$array [‘index’].

经过进一步测试,5.2.6具体做的是不同意5.3.3关于$array-> index是否为空();

这是我在两台服务器上运行的测试代码

<?PHP

echo PHPversion() . '<br>';

$array = array(
    'x' => 1,'y' => 2
);

if (!empty($array->x))
{
    echo "not empty";
}
else
{
    echo "empty";
}

?>

以下是两种不同的输出

5.2.6-1+lenny16
not empty

5.3.3-7+squeeze15
empty

当然,现在有一些功能被破坏的爆发,因为我们在开发过程中从未提醒过这些错误.有没有办法我们可以配置PHP 5.3以允许这种不正确的语法,而我们需要更多的时间来找到它的所有不正确的实例?

我不认为这是配置问题,是吗?在版本之间,empty()的工作方式有所改变吗?

解决方法

我刚刚将您的示例代码放到PHP版本( test)的一般测试中,它表明您是正确的,存在差异:

PHP 5.0.0到5.2.11(以及早期的5.3.0到5.3.1),这个“未定义属性”被报告为非空,这有资格作为缺陷或错误.

5.2.12(2009年12月17日)的相关变化为(ref):

从技上讲,这不是从PHP 5.2到5.3的向后不兼容的变化,因为它在两个分支中都是一个缺陷,并且在两个分支中都是固定的.如果您迁移,则很难发现,因为标准迁移指南不包括它们.相反,您需要完成软件的更改并查找票据的注释和参考.

所以回答你的问题:这是一个配置问题,因为使用的PHP版本算作配置.您更改了配置,然后遇到了问题.

同样如报告所示,这仅限于empty()和isset(),而不是一般对象/数组访问.你可以想象,如果情况确实如此,你会发现更多关于它的参考.

脚本宝典总结

以上是脚本宝典为你收集整理的PHP 5.2允许对象语法调用数组索引?全部内容,希望文章能够帮你解决PHP 5.2允许对象语法调用数组索引?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。