0

我有一个简单的应用程序,我正在尝试开始使用 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

问题是,当我创建使用 $container['foo'] 时,它尝试注入需要 foo 的类 Bar,因此最大嵌套存在错误。我的想法是,为什么没有通过关闭?在课堂上真正需要时会执行哪个?

还是我完全误解了闭包是什么?

4

0 回答 0