?
本文檔使用 PHP中文網(wǎng)手冊 發(fā)布
我們可以用一個簡單的例子來說明依賴注入的概念
下面的代碼中有一個 Database 的類,它需要一個適配器來與數(shù)據(jù)庫交互。我們在構(gòu)造函數(shù)里實例化了適配器,從而產(chǎn)生了耦合。這會使測試變得很困難,而且 Database 類和適配器耦合的很緊密。
<?php namespace Database; class Database { protected $adapter; public function __construct(){ $this->adapter = new MySqlAdapter; } } class MysqlAdapter { }
這段代碼可以用依賴注入重構(gòu),從而解耦
<?php namespace Database; class Database { protected $adapter; public function __construct(MySqlAdapter $adapter){ $this->adapter = $adapter; } } class MysqlAdapter { }
現(xiàn)在,我們以參數(shù)的形式向 Database 類傳遞其依賴的對象,而不是讓它自己產(chǎn)生所依賴的對象。我們甚至可以創(chuàng)建一個方法(method),讓這個方法可以接受依賴對象作為參數(shù)并在內(nèi)部設(shè)置依賴關(guān)系,或者,如果 $adapter 屬性本身是 public 的,我們可以直接給它賦值。