0

我正在重建我当前的代码,并试图通过依赖注入来做到这一点。我已经下载了 Pimple,并在一个文件中尝试为自己创建一些示例。在文档中,我来到了方法扩展,但我无法使其工作。对于测试,我创建了简单的类:

class ExtendClass
{
  private $extend = 'false';
    
  public function extendIt()
  {
    $this->extend = 'true';
  }
}

我创建了简单的对象,$DI是 Pimple\Container 的实例:

$DI['extend'] = function( $c )
{
    return new ExtendClass();
};

我试图用这个来扩展它:

$DI->extend( 'extend', function( $extend, $c )
{
    $extend->extendIt();
    return $extend;
} );

但它给了我这个错误:

带有消息“标识符“扩展”的未捕获异常“InvalidArgumentException”不包含对象定义。

所以我查看了容器,发现我需要将方法 __invoke 添加到我的类中,所以我添加了它并使这个方法返回实例:

class ExtendClass
{
    private $extend = 'false';

    public function __invoke()
    {
        return $this;
    }
    
    public function extendIt()
    {
        $this->extend = 'true';
    }
}

但在那之后我得到这个错误:

RuntimeException:无法覆盖冻结的服务“扩展”。

有人可以解释我做错了什么吗?谢谢。

4

1 回答 1

0

您需要像这样扩展服务:

$DI->extend( 'extend', function($app)
{
    $app['extend']->extendIt();
    return $app['extend'];
} );
于 2015-06-22T10:46:36.343 回答