使用self :: $ _ instance = new self()有什么意义?

时间:2015-10-27 19:21:08

标签: php

我正在学习OOP PHP并且遇到过这个问题:

//Store the single instance
private static $_instance;

/*
    Get an instance of the database
    @return database
*/
public static function getInstance () {
    if (!self::$_instance) {
        self::$_instance = new self();
    }
    return self::$_instance;
}

$_instance设置为新的self()有什么意义?我知道所有这一行都在创建一个新的类实例,但为什么需要这样做呢?有什么理由需要这个吗?我甚至没有在课堂上再打过电话。感谢您提供的任何帮助。

3 个答案:

答案 0 :(得分:5)

我们的想法是,无论何时在整个代码中调用getInstance(),您都将获得相同的实例。

在您只想访问同一对象的某些情况下,这很有用。像这样的对象通常可能有一个私有构造函数,它有效地强制你总是在同一个实例上操作(也称为单例)。

一般人都说'单身人士是邪恶的'。它们很好避免,因为它们可能会导致重大的设计问题。在某些情况下,它们仍然是一个好主意。

答案 1 :(得分:1)

工作示例

class Singleton
{
    public $data;

    private static $instance = null;

    public function __construct()
    {
        $this->data = rand();
    }


    public static function getInstance()
    {
        if (is_null(self::$instance))
            self::$instance = new self;

        return self::$instance;
    }


    //no clone
    private function __clone() {}
    //no serialize
    private function __wakeup() {}
}


$singleton = Singleton::getInstance();

echo $singleton->data;
echo '<br>';

$singleton2 = Singleton::getInstance();

echo $singleton2->data;
echo '<br>';

答案 2 :(得分:0)

这是Singleton模式。

当您有一个需要初始化和/或拆卸工作的对象并且该工作应该只执行一次时使用它。

实例缓存迫使那里只有一个类的实例。