本文翻译自
Symfony
作者 Fabien Potencier 的 《Dependency Injection in general and the implementation of a Dependency Injection Container in PHP》 系列文章。
- Part 1: What is Dependency Injection?
- Part 2: Do you need a Dependency Injection Container?
- Part 3: Introduction to the Symfony Service Container
- Part 4: Symfony Service Container: Using a Builder to create Services
- Part 5: Symfony Service Container: Using XML or YAML to describe Services
- Part 6: The Need for Speed
专有名词翻译成中文后会变得不利于理解,后续文章中将改用括号+中文备注的形式。
上文我通过一些示例讲解了 Dependency Injection
,本文将接着介绍 Dependency Injection Containers (容器)
的概念。
首先记住这句话:
大多数时候,
Dependency Injection
并不需要Container
。
只有当你需要管理一大堆具有很多依赖关系的不同对象时,Container
才会非常有用(例如框架中)。
上文书,创建 User
对象需要先创建 SessionStorate
对象。这里的有个瑕疵,创建对象时需要提前知道它所有的依赖项:
$storage = new SessionStorage('SESSION_ID');
$user = new User($storage);
以 Zend Framework
中 Zend_Mail
库发送邮件过程为例:
$transport = new <