我们最近遇到了一场灾难,不得不将我们的 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() 在版本之间的工作方式是否发生了变化?