【发布时间】:2018-03-25 17:28:48
【问题描述】:
当我执行以下操作时:
class AA {
public $a = '';
function __construct() {
$this->a = new BB();
}
}
class BB {
public $b = '';
function __construct() {
$this->b = new AA();
}
}
我收到Fatal error: Allowed memory size of X bytes exhausted。
是否有可能实现我在上面尝试做的事情?
我想要完成什么:
假设我有对象:
Universe:
Galaxy
Galaxy
Galaxy
Galaxy:
Blackhole
Star
Star
Star
Star
Blackhole:
Whitehole
Whitehole:
Universe
那么,白洞中的宇宙和大宇宙一样,它会像上面那样递归地继续下去。
【问题讨论】:
-
您定义了 2 个创建彼此新实例的类...当然您会遇到内存错误...
-
你做错了抽象。它更多的是哲学而不是编程。如果从另一件事创造一件事不是它的本质/本质,为什么你这样描述它们?更好的是,在你的星系中创建
createBlackhole()方法,在你的 backhole 类中创建createWhitehole()等等。在需要时调用。因为星系的存在不是为了创造黑洞,或者黑洞的存在不仅仅是为了创造白洞。所以不要做这样的抽象。如果有一天你会让 Universe 成为你的编译器,那么肯定它也会报错。 -
@marmeladze 是的,我明白了你的想法并尝试了它,它有效。但是,我希望它永远递归地工作。看看 [this link] (orteil.dashnet.org/nested) 并始终扩展第一个元素。我想做类似的事情。
标签: php recursive-datastructures