在对象中存储循环依赖关系是不好的做法,还是可能出现性能问题?


Is it bad practice, or likely to suffer performance issues, to store circular dependencies in objects?

使用循环引用是不好的做法还是会对性能产生重大影响?例如,添加对象A作为对象B的属性,然后添加对象B作为对象A的属性?

一个例子:

<?php 
class Object_A {
    public function __construct() {
        $this->b = new Object_B( $this );       
    }
    public function get_b() {
        return $this->b;
    }
}
class Object_B {
    public function __construct( Object_A $a ) {
        $this->a = $a;
    }
}

关于循环引用的更一般的讨论,请参见循环引用有什么问题?在程序员堆栈交换网站。但请记住,问题明确地陈述了

我不是在问关于同质循环引用,像那些在双链表或指针到父。
从5.3版开始,PHP实现了一个完全能够收集循环的垃圾收集器。

性能注意事项在手册中的垃圾收集-性能注意事项中进行了讨论。