【问题标题】:How to avoid infinite loop while referencing objects to themselves?如何在引用对象时避免无限循环?
【发布时间】:2020-09-04 06:01:52
【问题描述】:

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

我将类定义如下:

class Person
{
    public $friends = [];

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

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

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

【问题讨论】:

  • 请提供一个简短的例子来说明问题所在。
  • @NigelRen 已更新。希望我能说清楚
  • 给定的代码不会产生任何无限循环
  • @NicoHaase 当我尝试打印它们时,我只看到无限 RECURSION

标签: php object infinite-loop


【解决方案1】:

每个人都有自己的身份证:

class Person {
    static $index = 0;

    public $id;

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

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

【讨论】:

    猜你喜欢
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多