当前位置:首页 > 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实现购物车

PHP实现购物车功能 购物车功能是电商网站的核心模块之一,通常涉及商品添加、删除、数量修改和结算等操作。以下是使用PHP实现购物车功能的几种方法。 使用Session存储购物车数据 Session是…

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…

php实现聊天

php实现聊天

实现 PHP 聊天功能的方法 使用 WebSocket 和 PHP 实现实时聊天 WebSocket 是一种全双工通信协议,适合实现实时聊天功能。PHP 可以通过 Ratchet 库实现 WebSo…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…

php 实现单链表

php 实现单链表

单链表的基本概念 单链表是一种线性数据结构,由节点组成,每个节点包含数据域和指向下一个节点的指针域。链表的头节点是访问整个链表的入口。 单链表的节点类实现 在PHP中,可以通过类来定义链表节点。每个…

php mvc实现

php mvc实现

PHP MVC 实现步骤 模型(Model)层 模型负责数据处理和业务逻辑,通常与数据库交互。创建一个基类模型,其他具体模型继承它。 class Model { protected $db;…