2017-07-27 67 views
2

我有一個父類模型像這樣:PHP對象組成實踐

namespace vendor\appname\core; 

class Model 
{ 
    protected $db; 
    protected $session; 
    protected $cookie; 
    protected $record; 

    public function __construct() 
    { 
     $this->db = new Db; 
     $this->session = new Session; 
     $this->cookie = new Cookie; 
     $this->record = new Record; 
    } 
} 

在這裏,我有我的兒童模特,我可以擴展基本模型,並用有對象

namespace vendor\appname\models; 

use vendor\appname\core; 

class Login extends Model 
{ 
     // here i can use simply like so 
     $this->db->prepare() // and so on 
     $this->session->set() // and so on so fourth 
} 

所以,如果我有100班我應該做同樣的事情「對象組合」這是一個很好的做法嗎?那麼註冊表模式或工廠呢?有可能在這裏實現嗎?或依賴注入

+1

您應該使用依賴注入。 –

+0

@JonStirling我知道依賴注入,你鍵入提示類名稱,然後你傳遞對象,但在我的情況下,我該怎麼做?即時通訊擴展父級! –

+0

你是例子不顯示對象組成,它顯示繼承。不要問你是否可以使用一些給定的DP,你應該澄清你的問題並解釋你需要做什麼。 – Kwadz

回答

1

基於你的問題,我認爲你應該更多地閱讀和研究前五項OO設計原則(SOLID)和一般責任分配軟件原理(GRASP),以更多地瞭解設計模式和對象創建。儘管如此,你所做的更多的是繼承而不是組合。爲了簡單起見,

繼承更像是一個「is-a」關係,例如UserModel「is-a」Model,因此Model的所有屬性和方法都將成爲UserModel的一部分。

聚合更像是「使用一個」關係。模型「使用」QueryBuilder和DatabaseClient「。

另一方面,組成更像是「has-a」或「contain-a」關係,例如Book「contains-a」Page。

這只是一個例子,希望能讓你對事情有點清楚。瞭解這些以及Solid和Grasp會讓你瞭解各種可用的設計模式。