当前位置:首页 > PHP

php单例实现

2026-02-15 21:41:03PHP

单例模式简介

单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供全局访问点。适用于需要控制资源访问或限制实例数量的场景,如数据库连接、日志系统等。

基本实现步骤

私有化构造函数 防止外部通过new关键字创建实例:

private function __construct() {}

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

private function __clone() {}

私有化反序列化方法 防止通过反序列化创建新实例(PHP 7.4+):

private function __wakeup() {}

静态私有属性保存实例

private static $instance = null;

静态公共方法获取实例

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

完整代码示例

class Singleton {
    private static $instance = null;

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

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

线程安全改进

PHP原生单例在CLI模式下多线程时可能需加锁:

public static function getInstance() {
    if (self::$instance === null) {
        $lock = fopen(__FILE__, 'r');
        flock($lock, LOCK_EX);
        if (self::$instance === null) {
            self::$instance = new self();
        }
        flock($lock, LOCK_UN);
        fclose($lock);
    }
    return self::$instance;
}

实际应用示例

数据库连接单例:

php单例实现

class DBConnection {
    private static $instance = null;
    private $connection;

    private function __construct() {
        $this->connection = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
    }

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

    public function getConnection() {
        return $this->connection;
    }
}

注意事项

  • 单例模式可能引入全局状态,测试时需谨慎
  • 考虑依赖注入替代方案以提高可测试性
  • 单例生命周期与请求周期相同,长时间运行的脚本需注意内存管理

标签: php
分享给朋友:

相关文章

php实现递归

php实现递归

递归的基本概念 递归是一种函数调用自身的技术,适用于解决可以分解为相同子问题的问题。在PHP中,递归需要明确的终止条件(基线条件),否则会导致无限循环。 递归实现阶乘 阶乘是经典的递归案例,n! =…

php实现socket

php实现socket

PHP 实现 Socket 通信 PHP 可以通过 socket 扩展实现网络通信,支持 TCP/UDP 协议。以下是实现 Socket 通信的核心步骤和代码示例。 创建 TCP 服务器 //…

php实现的分页

php实现的分页

PHP 实现分页的方法 基本分页逻辑 分页的核心在于计算总页数、当前页码以及数据偏移量。假设每页显示 10 条数据: $current_page = isset($_GET['page']) ? (…

php实现下载

php实现下载

PHP实现文件下载 使用PHP实现文件下载可以通过设置HTTP头部信息强制浏览器下载文件而非直接打开。以下是几种常见的方法: 方法一:直接输出文件内容 $file_path = 'path/to/…

php实现统计

php实现统计

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

php实现过程

php实现过程

PHP 实现过程 PHP 是一种广泛使用的服务器端脚本语言,特别适合 Web 开发。以下是 PHP 实现过程的关键步骤和注意事项。 安装与配置 下载并安装 PHP,可以从官方 PHP 网站获取最新版…