我不明白这个"DI容器“是怎么用的。官方网站上的例子什么也没告诉我:http://pimple.sensiolabs.org
基本上,我有一个简单的站点,它由一组类组成: DB类、Cache类、User类和其他一些处理内容类型的类。
所有这些类都类似于Pimple中提到的“服务”,每个服务都应该能够调用另一个服务。现在,我正在实例化一个主类中的服务,我像使用单例一样使用它在其他类之间共享服务。
据我所知,Pimple确实做了这样的事情,但是我该如何使用它呢?
发布于 2012-05-21 20:38:50
在http://phpmaster.com/dependency-injection-with-pimple/上有一个教程解释了如何使用Pimple作为DIC。
另一种(但不一定推荐)方法是将容器注入到所有需要它的组件中(例如,你像使用ServiceLocator一样使用它),然后你只需按照文档所说的从Pimple获取对象:
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的结果,您可能想要阅读它,以更好地了解它是如何工作的。
发布于 2012-05-21 20:35:34
我不知道Pimple,但是我知道的DI引擎让实例化从你的手中消失了。您的对象不会创建其依赖项的实例。取而代之的是,DI引擎创建它们并根据请求分发它们。
因此,如果您的PHP代码正在创建新的实例,我认为您应该更改它,以便您的代码获得DI引擎并请求依赖项。
https://stackoverflow.com/questions/10685307
复制相似问题