我正在尝试一种MVC概念,其中数据库的主模型是从其他模型派生出来的。我想有一个主数据库类型的模型,用于连接和查询。然后,构建其他模型来支持控制器。也就是说,可以将产品模型从主数据库模型扩展到查询,而不是使用依赖项注入。
对于主数据库模型,我当前的想法和尝试如下:
namespace Portfolio\Application;
abstract class DriverModel {
private static $driver;
private $entity;
private function __construct() {
// Connection to the PDO will be done in here
}
private function __clone() {}
public static function getInstance() {
if(self::$driver)
return self::$driver;
self::$driver = new self();
return self::$driver;
}
protected function q($sql, $values = []) {
$stmt = $this->entity->Prepare($sql);
$stmt->execute($values);
return $stmt;
}
}
然后,我的示例概要文件控制器如下所示(具有使用主数据库运行查询的方法):
class ProfileModel extends DriverModel {
public function doSomeQ() {
$this->q('SELECT fname FROM users WHERE id = ?', [(int)1]);
}
}
但是,当我执行这行代码时:
print_r(ProfileModel::getInstance()->doSomeQ());
我留下了这个错误:(这是有道理的。)
未捕获错误:无法实例化抽象类。
然后从类中删除抽象属性(
class DriverModel
)但现在,我接收的实例是来自父类的实例,这意味着如果我执行
print_r()
在
getInstance()
方法
ProfileModel
,没有
doSomeQ()
方法
对实现这种方法的任何帮助都会很有帮助。