当前位置:首页 > PHP

php实现单例模式

2026-02-27 14:49:15PHP

php实现单例模式

PHP 单例模式实现方法

单例模式确保一个类只有一个实例,并提供一个全局访问点。以下是 PHP 中实现单例模式的常见方法。

php实现单例模式

基础实现

class Singleton {
    private static $instance;

    private function __construct() {
        // 私有构造函数防止外部实例化
    }

    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    private function __clone() {
        // 私有克隆方法防止克隆
    }

    private function __wakeup() {
        // 私有反序列化方法防止反序列化
    }
}

线程安全实现(PHP 通常不需要)

PHP 是单线程的,不需要考虑多线程安全问题。但以下代码展示了更严格的实现:

class ThreadSafeSingleton {
    private static $instance;
    private static $lock = false;

    private function __construct() {}

    public static function getInstance() {
        if (self::$instance === null) {
            if (!self::$lock) {
                self::$lock = true;
                self::$instance = new self();
                self::$lock = false;
            }
        }
        return self::$instance;
    }

    private function __clone() {}
    private function __wakeup() {}
}

延迟初始化实现

class LazySingleton {
    private static $instance;

    private function __construct() {}

    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new static();
        }
        return self::$instance;
    }

    private function __clone() {}
    private function __wakeup() {}
}

继承单例基类

abstract class SingletonBase {
    protected static $instances = [];

    protected function __construct() {}

    public static function getInstance() {
        $class = get_called_class();
        if (!isset(self::$instances[$class])) {
            self::$instances[$class] = new static();
        }
        return self::$instances[$class];
    }

    final private function __clone() {}
    final private function __wakeup() {}
}

class MySingleton extends SingletonBase {
    // 具体实现
}

使用 Trait 实现

trait SingletonTrait {
    private static $instance;

    private function __construct() {}

    public static function getInstance() {
        if (self::$instance === null) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    private function __clone() {}
    private function __wakeup() {}
}

class MySingleton {
    use SingletonTrait;
}

注意事项

  • 构造函数必须声明为 private 防止外部实例化
  • 必须禁用克隆方法 __clone()
  • 必须禁用反序列化方法 __wakeup()
  • 静态变量 $instance 用于存储唯一实例
  • getInstance() 方法是获取实例的唯一途径

以上方法提供了 PHP 中实现单例模式的不同方式,可根据具体需求选择适合的实现。

标签: 模式php
分享给朋友:

相关文章

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php实现队列

php实现队列

PHP实现队列的方法 队列是一种先进先出(FIFO)的数据结构,PHP可以通过多种方式实现队列功能。 使用数组模拟队列 PHP数组可以模拟队列的基本操作,通过array_push和array_shi…

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $db…

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数组…

php 实现下载

php 实现下载

PHP 实现文件下载的方法 使用 PHP 实现文件下载可以通过设置 HTTP 头信息,强制浏览器将文件作为附件下载而非直接打开。 基本下载实现 $file_path = 'path/to/your/…

php实现统计

php实现统计

PHP 实现统计功能 在 PHP 中实现统计功能通常涉及数据的收集、处理和展示。以下是一些常见的统计实现方法: 数据库数据统计 通过 SQL 查询可以直接从数据库中获取统计结果: $conn =…