PHP单例模式详解及应用
在PHP开发中,我们经常会遇到一些对象需要在整个应用程序中共享的情况。例如,数据库连接、缓存等资源。这时候,我们可以使用单例模式来确保这些资源只被创建一次,并且在程序的任何地方都可以访问到。什么是单例模式?单例模式(Singleton Pattern)是一种设计模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式通常用于需要频繁创建和销毁的对象,以减少系统资源的消耗,提高性能。单例模式的特点 私有化构造函数:防止外部代码使用new关键字创建多个实例。 提供一个静态方法:用于获取唯一的实例。 保存唯一实例的静态成员变量:用于存储唯一的实例。PHP单例模式实现 class Singleton { // 保存唯一实例的静态成员变量 private static $instance; // 私有化构造函数 private function __construct() { } // 禁止克隆 private function __clone() { } // 提供一个静态方法 public static function getInstance() { if (!isset(self::$instance)) { $c = __CLASS__; self::$instance = new $c; } return self::$instance; } } 单例模式的应用数据库连接在PHP开发中,数据库连接是一个典型的应用场景。我们可以使用单例模式来确保整个应用程序中只有一个数据库连接实例。 class DB { private static $instance; private $conn; private function __construct($host, $user, $password, $dbname) { $this->conn = new PDO("mysql:host={$host};dbname={$dbname}", $user, $password); } private function __clone() { } public static function getInstance($host, $user, $password, $dbname) { if (!isset(self::$instance)) { $c = __CLASS__; self::$instance = new $c($host, $user, $password, $dbname); } return self::$instance; } public function query($sql) { return $this->conn->query($sql); } } 缓存另一个常见的应用场景是缓存。我们可以使用单例模式来确保整个应用程序中只有一个缓存实例。 class Cache { private static $instance; private $cache; private function __construct() { $this->cache = array(); } private function __clone() { } public static function getInstance() { if (!isset(self::$instance)) { $c = __CLASS__; self::$instance = new $c(); } return self::$instance; } public function set($key, $value) { $this->cache[$key] = $value; } public function get($key) { return isset($this->cache[$key]) ? $this->cache[$key] : null; } }