2012-07-26 54 views
0

如果我使用setter進行依賴注入,並且一些類都需要相同的依賴關係,那麼我應該讓所有這些類擴展一個基類它的依賴關係的設置者?基類中的依賴注入設置器,並將類需要依賴關係作爲擴展

因此,例如:

說我有三大類:網頁,文章,評論,所有這些都依賴於$ DB和$用戶。

有什麼好處或具有基礎類依賴的缺點,是這樣的:

class Dependencies 
    { 
     private $database; 
     private $user; 
     final public function setDatabase($dbh) 
     { 
      $this->database = $dbh; 
     } 

     final public function setUser($user) 
     { 
      $this->user = $user; 
     } 
    } 

,然後有他其他類爲依賴

class Article extends Dependencies 
{ 
    public function __construct() 
    { 
     // some code 
    } 

    // some other functions that use $this->database and $this->user 
} 

擴展,而不是SETDATABASE和setUser存在於每個單獨的類(Article,Page和Comment)中。

謝謝。

回答

0

擁有一個名爲Dependencies的類是個壞消息。文章不是依賴關係的子類型。

這是性狀可能更合適的地方。

trait DatabaseOwner 
{ 
    private $database; 

    final public function setDatabase($dbh) 
    { 
    $this->database = $dbh; 
    } 
} 

class Article 
{ 
    use DatabaseOwner; 
} 

如果您發現自己經常使用相同的組合,則可以創建包含多個特徵的特徵。然而,所有這些說:如果這三個類都從一些更好的命名類下降,它代表一個is-a關係,並且它實現了這些函數(或使用特徵),因爲它是基類型的內在特徵,那麼完全可以接受。

但是,創建一個單一的基類只是因爲事情發生共享某些屬性在我看來並不好。

+0

適當使用性狀毫無疑問,但值得一提的是,他們只能從php5.4起 – Crisp 2012-07-26 03:03:37

+0

我想我會使用特質,謝謝。 – 2012-07-26 03:58:17