我不明白这个“DI容器”是怎么用的。官方网站上显示的示例没有告诉我任何信息:http://pimple.sensiolabs.org
基本上我有一个简单的站点,它由一组类组成:DB 类、Cache 类、User 类和其他一些处理内容类型的类。
所有这些类就像Pimple中提到的“服务”,每个服务都应该能够调用另一个服务。现在我正在一个主类中实例化服务,我像单例一样使用它来在其他类之间共享服务。
根据我的阅读,Pimple 正是做这类事情的,但我该如何使用它呢? :s
最佳答案
http://phpmaster.com/dependency-injection-with-pimple/ 有教程解释如何将 Pimple 用作 DIC。
另一种(但不一定推荐)方法是将容器注入(inject)到所有需要它的组件中(例如,您像使用 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
接口(interface)的一部分,它允许您像访问数组一样访问对象,因此当您执行此操作时,$container['foo']
Pimple 将检查它是否具有为 foo 定义的闭包是否只是一些参数并相应地组装服务。
疙瘩是 blog post about Lambdas and Closures 的结果您可能想要阅读以更好地了解其工作原理。
关于php - 认识疙瘩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10685307/