在 PHP 中,要优雅地实现单例模式,可以使用以下代码:
class Singleton {
private static $instance;
private function __construct() {}
public static function getInstance(): Singleton {
if (null === self::$instance) {
self::$instance = new Singleton();
}
return self::$instance;
}
private function __clone() {}
private function __wakeup() {}
}
这个实现方法包含以下特点:
private function __construct()),这样就无法从类外部实例化新对象。getInstance(),用于获取单例实例。getInstance() 被调用时,会检查 $instance 是否为 null。如果是,则创建一个新的 Singleton 实例;否则,返回已存在的实例。__clone() 和 __wakeup() 方法也设置为私有,以防止通过克隆或反序列化创建新的实例。使用这个单例类的方法如下:
$singleton1 = Singleton::getInstance();
$singleton2 = Singleton::getInstance();
if ($singleton1 === $singleton2) {
echo "两个对象是相同的实例。";
} else {
echo "两个对象不是相同的实例。";
}
这段代码将输出 “两个对象是相同的实例。”,因为我们通过 Singleton::getInstance() 获取的两个对象都是同一个实例。