PHP防止父类从子类进行多次实例化


PHP prevent parent class from multiple instantiation from children?

因此,当前我的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...
    }
}