PHP阻止子类从子进程多实例化?

时间:2012-01-11 03:47:52

标签: php object instantiation

所以目前我的class DATABASE使用单例进行连接,并在class SQL的构造函数中调用。我有4个其他类扩展class SQL以访问其方法。问题是,在某些情况下,孩子们互相实例化,所以我担心我会创建多个class SQL对象,因为他们默认调用他们的父构造函数,即class SQL。我读过关于依赖注入的内容,但是在我的情况下没有明确如何实现它,所以这就是我的想法。 让所有类扩展class DATABASE并使class SQL方法保持静态。 但是我必须在class DATABASE中调用单独的连接,就像它自己的类一样。

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,并相互实例化,我知道我不是在创建多个对象。 我希望这是有道理的,如果你需要我,我可以详细说明,但这是否可以解决我的问题呢?

1 个答案:

答案 0 :(得分:1)

我猜你以其他方式建立你的课程,这种方法在我看来更加一致。

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...
    }
}