如何在引用对象自身时避免无限循环?

时间:2020-05-18 12:27:49

标签: php object infinite-loop

比方说,我想要一个人员列表(人员数量是恒定的)。现在,想象每个人都必须与其他所有人成为朋友(这并不令人毛骨悚然,因为分配朋友的顺序很重要)。显然,朋友是人类,是同一种对象。

我将类定义如下:

class Person
{
    public $friends = [];

    function new_freind($person)
    {
        // $person is passed as an object of the same type
        $this->friends[] = $person;
    }
}

结果,由于永久地相互引用对象,程序陷入无限循环。

我想知道您是否可以分享您的想法以防止出现此问题。 我的想法是在$friends内存储某种键,而不是实际的对象。

1 个答案:

答案 0 :(得分:0)

每个人都有自己的ID:

class Person {
    static $index = 0;

    public $id;

    public function __constructor() {
        $this->id = ++self::$index;
    }

分配时检查$this->id !== $person->id