我正在重建我当前的代码,并试图通过依赖注入来做到这一点。我已经下载了 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:无法覆盖冻结的服务“扩展”。
有人可以解释我做错了什么吗?谢谢。