用疙瘩进行依赖注入 - 传递闭包

时间:2014-10-09 12:34:10

标签: php dependency-injection closures pimple

我有简单的应用程序,我正在尝试开始使用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,因此最大嵌套出错。我的想法是,为什么没有通过关闭?哪个会在课堂上真正需要的时候执行?

或者我是否容易误解了闭包是什么?

0 个答案:

没有答案