对象比较给出致命错误

时间:2012-11-13 11:59:10

标签: php

在没有执行的情况下,我有一个问题要回答。

class Foo {
    public $x;
}
$a = new Foo();
$b = new Foo();
$a->x = $b;
$b->x = $a;

print_r($a == $b);

我认为这应该打印1但是当我执行它时会产生致命的错误。

Fatal error: Nesting level too deep - recursive dependency? on line 13

有谁可以解释为什么我会收到此错误?

2 个答案:

答案 0 :(得分:4)

由于PHP比较对象的方式。

当您使用==比较对象时,PHP将查看每个对象的每个属性(以及嵌套对象,以防某些属性包含其他对象),并比较它们。如果所有属性相等,则对象将被视为相等。

在这种特定情况下,您将对象放在彼此的属性中,导致比较引擎循环($a->b->a->b->a->b->...),这会引发错误。

答案 1 :(得分:1)

PHP试图找出对象是否相等,而不是引用是否相等。为了评估这一点,该对象完全被追踪。此遍历包括指向其他​​对象的引用。所以你实现了无限循环......