因此,当前我的class DATABASE
使用单例进行连接,并在class SQL
的构造函数中调用。我还有4个其他类,它们扩展了class SQL
以访问其方法。问题是,在某些情况下,子对象会相互实例化,所以我担心我会创建多个class SQL
对象,因为它们默认调用其父构造函数,也称为class SQL
。我读过关于依赖注入的文章,但不清楚如何在我的情况下实现它,所以这就是我的想法。让所有类扩展class DATABASE
并使class SQL
方法成为静态的。但是我必须调用class DATABASE
中的singleton连接,在它自己的类上也是如此
class DATABASE {
function __construct() {
self::getInstance();
/// or DATABASE::getInstance ( im not quite positive which way )
}
public static function getInstance() {
if (self::$instance == false) {
self::$instance = new DATABASEMANAGER();
}
return self::$instance;
}
}
我这样想,因为所有类都扩展了class DATABASE
,并相互实例化,所以我知道我不是在创建多个对象。我希望这是有道理的,如果你需要的话,我可以详细说明,但这对解决我的问题有意义吗?
我想你是以其他方式构建类的,在我看来,这种方法更一致。
class DATABASE extends DATABASEMANAGER
{
static $instance;
private function __construct()
{
parent::__construct();
}
public static function getInstance()
{
if (empty(self::$instance))
{
self::$instance = new self();
}
return self::$instance;
}
}
用法:
class Blog
{
public function __construct()
{
$this->database = DATABASE::getInstance();
}
public function getRecord($id)
{
$result = $this->database->query("SELECT * FROM blog WHERE id='{$id}'");
//or
$result = DATABASE::getInstance()->query("SELECT * FROM blog WHERE id='{$id}'");
//other actions...
}
}