Php 递归对象创建
Php recursive object creating
当我执行以下操作时:
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
那么,白洞中的宇宙就和大宇宙一样,会像上面那样递归地继续下去。
在您的代码中,您创建了 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];
我们根据要求创建元素,这可能会提供足够好的 幻觉 无限
当我执行以下操作时:
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
那么,白洞中的宇宙就和大宇宙一样,会像上面那样递归地继续下去。
在您的代码中,您创建了 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];
我们根据要求创建元素,这可能会提供足够好的 幻觉 无限