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