【发布时间】:2014-06-20 12:05:53
【问题描述】:
我正在重建我当前的代码,并尝试通过依赖注入来完成它。我已经下载了 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: 无法覆盖冻结的服务“扩展”。
谁能解释我做错了什么?谢谢。
【问题讨论】:
-
你是在 PHPUnit 的 setUp 方法中运行 $DI->extend( 'extend', function( $extend, $c ) 吗?
标签: php dependency-injection pimple