依赖注入是“我的构造函数中还有更多参数”的一个大词。
这是您在不喜欢Globals的可怕Singleton浪潮之前所做的事情:
<?phpclass User { private $_db; function __construct($db) { $this->_db = $db; }}$db = new Db();$user = new User($db);现在,诀窍是使用单个类来管理您的依赖项,如下所示:
class DependencyContainer { private _instances = array(); private _params = array(); public function __construct($params) { $this->_params = $params; } public function getDb() { if (empty($this->_instances['db']) || !is_a($this->_instances['db'], 'PDO') ) { $this->_instances['db'] = new PDO( $this->_params['dsn'], $this->_params['dbUser'], $this->_params['dbPwd'] ); } return $this->_instances['db']; }}class User{ private $_db; public function __construct(DependencyContainer $di) { $this->_db = $di->getDb(); }}$dependencies = new DependencyContainer($someParams);$user = new User($dependencies);您必须认为自己只是另一类,而且更加复杂。但是,您的用户类可能需要一些信息来记录消息,例如许多其他类。只需将getMessageHandler函数添加到您的依赖项容器中,并将一些添加
$this->_messages= $di->getMessageHandler()到您的用户类中。其余代码没有任何变化。



