在PHP中,单例模式是一种常用的设计模式,它确保一个类仅有一个实例,并提供一个全局访问点来获取该实例。以下是单例模式的一个简单实现示例:
<?php
class Singleton {
// 私有静态变量,保存类的唯一实例
private static $instance = null;
// 私有构造函数,防止外部通过new创建实例
private function __construct() {}
// 私有克隆方法,防止外部通过clone创建实例
private function __clone() {}
// 私有反序列化方法,防止外部通过反序列化创建实例
private function __wakeup() {}
// 静态方法,用于获取类的唯一实例
public static function getInstance() {
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
// 示例方法,展示实例的用途
public function doSomething() {
echo "Doing something...\n";
}
}
// 使用示例
$instance1 = Singleton::getInstance();
$instance1->doSomething();
$instance2 = Singleton::getInstance();
// 由于是单例,$instance2和$instance1实际上是同一个实例
$instance2->doSomething();
// 输出结果将是两次"Doing something..."
?>
在这个示例中,`Singleton`类通过私有化其构造函数、克隆方法和反序列化方法来阻止外部直接创建或复制实例。相反,它提供了一个静态的`getInstance`方法,该方法检查是否已经创建了类的实例。如果没有,它将创建一个新实例并返回它;如果已存在,它将返回已存在的实例。这样,无论调用多少次`getInstance`方法,它都将返回同一个实例。