当前位置:首页 > PHP

php单实现

2026-03-12 20:11:36PHP

PHP 单例模式实现

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

基本实现步骤

私有化构造函数,防止外部直接实例化。

private function __construct() {}

私有化克隆方法,防止通过克隆创建新实例。

private function __clone() {}

私有化反序列化方法,防止通过反序列化创建新实例。

private function __wakeup() {}

创建一个静态私有属性存储唯一实例。

private static $instance;

提供一个静态公共方法获取实例,确保只创建一个实例。

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

完整示例代码

class Singleton {
    private static $instance;

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

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

    public function doSomething() {
        echo "Doing something...";
    }
}

// 使用示例
$singleton = Singleton::getInstance();
$singleton->doSomething();

线程安全考虑

在 PHP 的多线程环境中(如 pthreads 扩展),需要额外考虑线程安全。可以通过加锁实现:

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

    private function __construct() {}

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

继承单例类

如果需要继承单例类,可以将构造函数改为 protected:

protected function __construct() {}

子类需要重写 getInstance 方法:

class ChildSingleton extends Singleton {
    private static $instance;

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

常见应用场景

数据库连接池 日志记录器 配置管理 缓存系统

php单实现

注意事项

单例模式可能引入全局状态,不利于单元测试 过度使用单例可能导致代码耦合度高 在 PHP-FPM 环境下,每个请求都是独立的,单例的生命周期仅限于当前请求

标签: php
分享给朋友:

相关文章

php实现购物车

php实现购物车

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

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERVER…

php 实现秒杀

php 实现秒杀

PHP 实现秒杀的关键技术 秒杀系统需要解决高并发、超卖、性能瓶颈等问题。以下是实现秒杀的核心方案: 使用 Redis 预减库存 将商品库存提前加载到 Redis 中,通过原子操作保证库存准确性:…

php 队列的实现

php 队列的实现

PHP 队列的实现方法 使用数据库实现队列 创建一个数据表存储队列任务,包含任务ID、状态、创建时间等字段。通过SQL语句实现任务的入队和出队操作。 // 入队操作 INSERT INTO queu…

php https实现

php https实现

PHP 中实现 HTTPS 的方法 在 PHP 中实现 HTTPS 主要通过配置服务器和编写代码来确保通信的安全性。以下是几种常见的方法: 配置服务器支持 HTTPS 确保服务器已安装 SSL/T…

php 实现md5

php 实现md5

使用 PHP 内置函数实现 MD5 PHP 提供了 md5() 函数,可以直接计算字符串的 MD5 哈希值。该函数接受一个字符串参数,返回 32 字符的十六进制哈希值。 $string = "H…