【发布时间】:2014-01-21 17:15:18
【问题描述】:
当我比较两个不同的对象时,它首先返回true,然后在print_r(对象上)返回false。
来自 PHP 手册:
如果两个对象实例具有相同的属性和值,并且是同一类的实例,则它们是相等的。
但是在这里,例如,我设置了不同的值。为什么 PHP 5.4.0 - 5.5.7 的结果不同?
abstract class first
{
protected $someArray = array();
}
class second extends first
{
protected $someArray = array();
protected $someValue = null;
public function __construct($someValue)
{
$this->someValue = $someValue;
}
}
$objFirst = new second('123');
$objSecond = new second('321');
var_dump ($objFirst == $objSecond);
print_r($objFirst);
var_dump ($objFirst == $objSecond);
结果是:
bool(true)
second Object ( [someArray:protected] =>
Array ( ) [someValue:protected] => 123 )
bool(false)
但我的预期是:
bool(false)
second Object ( [someArray:protected] =>
Array ( ) [someValue:protected] => 123 )
bool(false)
【问题讨论】:
-
好吧,我确认一下。请参阅3v4l.org/B6qrN - 从 5.4.0 开始,它给出了真/假。奇怪
-
这一定是php中的一些错误。我已经交换了第二类属性的声明顺序,我们到处都是假/假:3v4l.org/6VQ14
-
实际上 print_r 似乎正在影响行为 - 3v4l.org/Z8l7r
-
不能再用当前主复制。 (又名错误修复)
-
@Nadir-Sampaoli - 除了你的滑稽评论,看看这个错误在被识别后修复的速度有多快