在父类中实例化数据库连接是个好主意,那么它的子类可以继承吗?
例如,这是我的核心模型,
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;
}
}
答案 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