PHP对象组合实践

时间:2017-07-27 14:03:32

标签: php design-patterns

我有一个像这样的父类模型:

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 :(得分:1)

基于您的问题,我认为您应该阅读并研究更多关于前五个OO设计原则(SOLID)和一般责任分配软件原则(GRASP)的内容,以更多地了解设计模式和对象创建。 话虽如此,你所做的更多是继承而不是组合。为简单起见,

继承更多是“is-a”关系,例如UserModel“is-a”Model,因此Model的所有属性和方法都将成为UserModel的一部分。

聚合更像是“使用”关系。模型“使用”一个QueryBuilder和DatabaseClient。

另一方面,

组合更像是“has-a”或“contains-a”关系,例如Book“contains-a”Page。

这只是一个例子,希望能让你有点清楚。了解这些以及Solid和Grasp将使您了解可用的各种设计模式。