阅读量:0
在 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()
获取的两个对象都是同一个实例。