【发布时间】:2013-06-03 06:09:51
【问题描述】:
我们最近遇到了一场灾难,不得不将我们的 php web 应用程序从 PHP 版本 5.2.6-1+lenny16 迁移到 PHP 版本 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() 在版本之间的工作方式是否发生了变化?
【问题讨论】:
-
你确定 $array 是数组吗?无法重现您的错误。您能提供完整的复制示例吗?