当前位置:首页 > PHP

php怎么实现单例模式

2026-04-03 12:51:12PHP

单例模式的概念

单例模式确保一个类只有一个实例,并提供一个全局访问点。在PHP中,常用于数据库连接、日志系统等需要全局唯一对象的场景。

实现单例模式的关键步骤

私有化构造函数 防止外部直接实例化对象,构造函数应声明为private

private function __construct() {}

私有化克隆方法 防止通过克隆创建新实例,__clone方法也应声明为private

php怎么实现单例模式

private function __clone() {}

静态私有属性保存实例 使用静态私有属性存储类的唯一实例:

private static $instance;

静态公共方法获取实例 提供静态方法获取唯一实例,首次调用时创建实例,后续调用直接返回:

php怎么实现单例模式

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() {}

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

线程安全考虑(PHP多进程环境)

PHP默认是单线程运行,通常无需考虑线程安全。但在多进程环境下(如PHP-FPM),每个请求是独立进程,单例仅在当前请求生命周期内有效。

继承与单例模式

若需允许子类继承单例基类,可将构造函数改为protected,并在子类中实现自己的getInstance方法:

class ParentSingleton {
    protected static $instance;

    protected function __construct() {}
    protected function __clone() {}

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

class ChildSingleton extends ParentSingleton {
    protected static $instance;
}

实际应用示例(数据库连接)

class Database {
    private static $instance;
    private $connection;

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

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

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

// 使用方式
$db = Database::getInstance()->getConnection();

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

相关文章

php实现购物车

php实现购物车

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

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php 路由实现

php 路由实现

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

php 登录实现

php 登录实现

PHP 登录实现 PHP 登录功能通常包括用户认证、会话管理和安全性措施。以下是实现 PHP 登录功能的关键步骤。 数据库准备 创建一个用户表存储用户信息,通常包括用户名、密码(加密存储)和其他必要…

php实现mysql

php实现mysql

PHP 连接 MySQL 的基本方法 PHP 提供了多种方式与 MySQL 数据库进行交互,以下是最常用的几种方法。 使用 MySQLi 扩展 MySQLi 是 MySQL 的改进扩展,支持面向对…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…