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(),而不是一般对象/数组访问.你可以想象,如果情况确实如此,你会发现更多关于它的参考. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |