php设计模式之单例模式使用示例


在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`方法,它都将返回同一个实例。