在没有执行的情况下,我有一个问题要回答。
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
有谁可以解释为什么我会收到此错误?
答案 0 :(得分:4)
由于PHP比较对象的方式。
当您使用==
比较对象时,PHP将查看每个对象的每个属性(以及嵌套对象,以防某些属性包含其他对象),并比较它们。如果所有属性相等,则对象将被视为相等。
在这种特定情况下,您将对象放在彼此的属性中,导致比较引擎循环($a->b->a->b->a->b->...
),这会引发错误。
答案 1 :(得分:1)
PHP试图找出对象是否相等,而不是引用是否相等。为了评估这一点,该对象完全被追踪。此遍历包括指向其他对象的引用。所以你实现了无限循环......