php - 认识疙瘩

标签 php dependency-injection

我不明白这个“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/

相关文章:

php - 类似于 Facebook 搜索的 Laravel 原始全文查询

php - 如何使用codeigniter通过下拉菜单过滤数据库中的记录

PHP echo 不工作

php - 解析来自 Yahoo! 的某些信息天气 RSS 源

asp.net-core - 为自定义事件和指标注入(inject) App Insights

php - 在 ZF2 中创建具有依赖项(依赖注入(inject))的 Doctrine 存储库

php - 在 PHP 中将 Word 文档转换为可用的 HTML

java - Spring beans 执行范围

java - Spring中如何从@Autowired List<>的每个bean中获取@Qualifier

java - 哪种 bean 类是可注入(inject)的?