3

我得到了一个不执行的问题来回答。

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

谁能解释我为什么会收到这个错误?

4

2 回答 2

4

因为 PHP 比较对象的方式。

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

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

于 2012-11-13T12:02:58.937 回答
1

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

于 2012-11-13T12:03:23.507 回答