Создание рекурсивного объекта Php

Когда я делаю следующее:

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

Тогда Вселенная в белой дыре такая же, как и большая вселенная, и она будет продолжаться, как указано выше, рекурсивно.

0

Решение

В вашем коде вы создаете A, который создает B, который создает другой A, который создает другой B, и так далее. Так что да, в конце концов вам не хватит памяти.

Я думаю, что ты пытаешься сделать, это

<?php

abstract class Element {
private $elements;
abstract protected function createElements();
public function getElements() {
if(null === $this->elements) {
$this->elements = $this->createElements();
}
return $this->elements;
}
}

class Whitehole extends Element{
protected function createElements() {
return [new Universe()];
}
}
class Blackhole extends Element{
protected function createElements() {
return [new Whitehole()];
}
}
class Galaxy extends Element{
protected function createElements() {
return [new Blackhole(), new Star(), new Star(), new Star(), new Star()];
}
}
class Universe extends Element{
protected function createElements() {
return [new Galaxy(), new Galaxy(), new Galaxy()];
}
}
class Star extends Element{
protected function createElements() {
return [];
}
}

$universe = new Universe();
$universe->getElements()[0]->getElements()[0];

Мы создаем элементы по их запросу, которые могут обеспечить достаточно хорошее иллюзия бесконечности

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]