У вас есть то, что известно как циклическая зависимость .А для завершения требуется В, чтобы построить, а для завершения В требуется А, чтобы построить.Таким образом, это идет кругом навсегда.
По сути, происходит то, что self::$instance
в каждом классе не заполняется до тех пор, пока не закончится new class()
.Итак, в конструкторе вы вызываете другой getInstance
.Но каждый раз, когда вы нажимаете get_instance()
, self::$instance
все еще равен нулю, потому что предыдущий new
никогда не заканчивался.И снова и снова вы идете.Это будет продолжаться до конца.
Вместо этого добавьте его после строительства:
class foo {
private static $instance;
private function __construct() {
}
private function setBar(bar $bar) {
$this->bar = $bar;
}
public static function get_instance() {
if (empty(self::$instance)) {
self::$instance = new foo();
self::$instance->setBar(bar::get_instance());
}
return self::$instance;
}
}
class bar {
private static $instance;
public function __construct() {
}
private function setFoo(foo $foo) {
$this->foo = $foo;
}
public static function get_instance() {
if (empty(self::$instance)) {
self::$instance = new bar();
self::$instance->setFoo(foo::get_instance());
}
return self::$instance;
}
}
Однако я бы действительно предложил бы перестроить ваши отношения и классытак что вы вводите зависимости вместо того, чтобы создавать самостоятельные синглтоны.