PHP 设计模式之 单例模式
单例模式是指保证一个类仅有一个实例,并提供一个访问它的全局访问点。单例模式常用于管理共享的资源,例如数据库连接对象、文件系统等。
实现单例模式的步骤
- 通过将类的构造函数设置为私有,以防止外部创建新的对象实例。
- 创建一个静态方法,它将作为类的唯一入口。该方法将负责创建或返回现有实例的引用(如果已经存在)。
示例一:数据库连接类
以下是一个实现单例模式的数据库连接类示例。它确保只有一个数据库连接实例,在需要时始终返回相同的实例。
class Database
{
private static $instance = null;
private $connection;
private function __construct()
{
$this->connection = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
}
public static function getInstance()
{
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
public function getConnection()
{
return $this->connection;
}
}
// 使用示例
$db1 = Database::getInstance();
$db2 = Database::getInstance();
var_dump($db1 === $db2); // true
示例二:配置类
以下是一个从文件中加载和存储配置设置的示例。由于应用程序只需要一个配置实例,因此我们使用单例模式确保它只被创建一次。
class Config
{
private static $instance = null;
private $settings = [];
private function __construct()
{
// 从文件中加载配置
$config = file_get_contents('config.json');
$this->settings = json_decode($config, true);
}
public static function getInstance()
{
if (self::$instance === null) {
self::$instance = new self();
}
return self::$instance;
}
public function get($key)
{
return $this->settings[$key] ?? null;
}
public function set($key, $value)
{
$this->settings[$key] = $value;
// 将更改保存回文件
file_put_contents('config.json', json_encode($this->settings));
}
}
// 使用示例
$config = Config::getInstance();
$debugMode = $config->get('debug'); // 从配置文件中获取调试模式
$config->set('debug', true); // 在运行时更改配置
以上示例展示了两个用例,一个用于管理数据库连接对象,另一个用于管理应用程序的配置设置。这些都是常见的单例模式用例。通过实现单例模式,我们可以确保这些资源只被创建一次,同时提供了易于访问和管理的全局访问点。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php 设计模式之 单例模式 - Python技术站