首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pimple扩展对象定义

Pimple扩展对象定义
EN

Stack Overflow用户
提问于 2014-06-20 12:05:53
回答 1查看 1.7K关注 0票数 0

我正在重新构建我的当前代码,并试图通过依赖注入来实现它。我已经下载了Pimple,在一个文件中,我试图为自己创建几个示例。在文档中,我谈到了方法扩展,但是我无法使它工作。为了进行测试,我创建了简单的类:

代码语言:javascript
复制
class ExtendClass
{
  private $extend = 'false';
    
  public function extendIt()
  {
    $this->extend = 'true';
  }
}

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

代码语言:javascript
复制
$DI['extend'] = function( $c )
{
    return new ExtendClass();
};

我试着用这个来扩展它:

代码语言:javascript
复制
$DI->extend( 'extend', function( $extend, $c )
{
    $extend->extendIt();
    return $extend;
} );

但它给了我一个错误:

带有消息“标识符”“InvalidArgumentException”的未命名异常‘’不包含对象定义。

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

代码语言:javascript
复制
class ExtendClass
{
    private $extend = 'false';

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

但在那之后,我得到了一个错误:

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

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

EN

回答 1

Stack Overflow用户

发布于 2015-06-22 10:46:36

您需要像这样扩展服务:

代码语言:javascript
复制
$DI->extend( 'extend', function($app)
{
    $app['extend']->extendIt();
    return $app['extend'];
} );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24326867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档