Инъекция зависимости с прыщом — проходное закрытие

У меня есть простое приложение, и я пытаюсь начать использовать контейнер DI. Я скачал Pimple, изучил код и документацию. Через некоторое время я пришел к забавным вещам. У меня есть два класса, которые в особых случаях общаются между собой.

class Foo
{
/**
* @var Bar
*/
private $bar;

public function __construct(Bar $bar)
{
$this->bar = $bar;
}
}

class Bar
{
/**
* @var Foo
*/
private $foo;

public function __construct(Foo $foo)
{
$this->foo = $foo;
}
}

Я определил контейнер Pimple с двумя классами, например так:

$container = new Pimple\Container();
$container['foo'] = function($c)
{
return new Foo($c['bar']);
};
$container['bar'] = function($c)
{
return new Bar($c['foo']);
};

Вот контейнер var_dumped:

object(Pimple\Container)[14]
private 'values' =>
array (size=2)
'foo' =>
object(Closure)[17]
'bar' =>
object(Closure)[18]
private 'factories' =>
object(SplObjectStorage)[15]
private 'protected' =>
object(SplObjectStorage)[16]
private 'frozen' =>
array (size=0)
empty
private 'raw' =>
array (size=0)
empty
private 'keys' =>
array (size=2)
'foo' => boolean true
'bar' => boolean true

Проблема в том, что когда я создаю use $ container [‘foo’], он пытается внедрить класс Bar, для которого требуется foo, поэтому возникает ошибка с максимальным вложением. Моя идея, почему не прошло закрытие? Что будет выполнено, когда это будет действительно необходимо в классе?

Или я совершенно не понял, что такое закрытие?

0

Решение

Задача ещё не решена.

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

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

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