首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解Pimple

了解Pimple
EN

Stack Overflow用户
提问于 2012-05-21 20:30:22
回答 2查看 11.3K关注 0票数 17

我不明白这个"DI容器“是怎么用的。官方网站上的例子什么也没告诉我:http://pimple.sensiolabs.org

基本上,我有一个简单的站点,它由一组类组成: DB类、Cache类、User类和其他一些处理内容类型的类。

所有这些类都类似于Pimple中提到的“服务”,每个服务都应该能够调用另一个服务。现在,我正在实例化一个主类中的服务,我像使用单例一样使用它在其他类之间共享服务。

据我所知,Pimple确实做了这样的事情,但是我该如何使用它呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-21 20:38:50

http://phpmaster.com/dependency-injection-with-pimple/上有一个教程解释了如何使用Pimple作为DIC。

另一种(但不一定推荐)方法是将容器注入到所有需要它的组件中(例如,你像使用ServiceLocator一样使用它),然后你只需按照文档所说的从Pimple获取对象:

代码语言:javascript
复制
class SomeClassThatNeedsSession
{
    private $session;
    public function __construct(Pimple $container) 
    {
        $this->session = $container['session'];
    }
}

换句话说,您只需要获取所需的内容和Pimple will handle the lifetime of that object, e.g. whether it needs to be created or is reused。OffsetGet是ArrayAccess接口的一部分,它允许你访问像数组这样的对象,所以当你这样做的时候,$container['foo'] Pimple将检查它是否有一个为foo定义的闭包,它是否只是一个参数,并相应地组装服务。

粉刺是blog post about Lambdas and Closures的结果,您可能想要阅读它,以更好地了解它是如何工作的。

票数 19
EN

Stack Overflow用户

发布于 2012-05-21 20:35:34

我不知道Pimple,但是我知道的DI引擎让实例化从你的手中消失了。您的对象不会创建其依赖项的实例。取而代之的是,DI引擎创建它们并根据请求分发它们。

因此,如果您的PHP代码正在创建新的实例,我认为您应该更改它,以便您的代码获得DI引擎并请求依赖项。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10685307

复制
相关文章

相似问题

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