在父类中实例化db连接然后它的子类可以继承它吗?

时间:2014-07-30 13:25:29

标签: php inheritance pdo multiple-inheritance

类中实例化数据库连接是个好主意,那么它的子类可以继承吗?

例如,这是我的核心模型,

class CoreModel
{
    protected $connection;

    public function __construct() 
    {
        // Construct database connection data.
        $this->connection = new Database(DSN,DB_USER,DB_PASS);
        $this->connection->connect();
    }

}

然后我有这些类从CoreModel

延伸
class Article extends CoreModel
{
    public function __construct()
    {
        parent::__construct();
    }
}

class Image extends CoreModel
{
    public function __construct()
    {
        parent::__construct();
    }
}

class Controller extends CoreModel
{
    public function __construct()
    {
        parent::__construct();
    }
}

是否会导致db连接无限次?那么在我的情况下, 3 db连接会是什么?

如果这是一个坏主意,那么实例化数据库连接一次的基本方法是什么,以便所有类都可以依赖它?

修改

$connection = new Database(DSN,DB_USER,DB_PASS);
$connection->connect();

$controller = new Controller($connection);
$article = new Article($connection);

class Article {

    protected $connection;

    public function __construct(Database $connection) {
        $this->connection = $connection;
    }

}

1 个答案:

答案 0 :(得分:2)

是的,这是一个坏主意。构造函数代码将为每个子节点单独执行,最后您将拥有多个数据库连接。除此之外,使用特定的数据库连接对某个类进行硬编码是一个坏主意。您应该dependency injecting与构造函数的数据库连接:

class Article {

    protected $connection;

    public function __construct(Database $connection) {
        $this->connection = $connection;
    }

}

虽然拥有直接数据库访问权限的“模型类”似乎也是一个坏主意。你应该仔细阅读这个问题:Looking for a way to handle/approach PHP OOP websites