我正在学习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()
有什么意义?我知道所有这一行都在创建一个新的类实例,但为什么需要这样做呢?有什么理由需要这个吗?我甚至没有在课堂上再打过电话。感谢您提供的任何帮助。
答案 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模式。
当您有一个需要初始化和/或拆卸工作的对象并且该工作应该只执行一次时使用它。
实例缓存迫使那里只有一个类的实例。