介绍
单例模式是设计模式最简单的一种,属于创建型模式,该模式由以下三个特征:
1.单例类只能有一个实例。
2.单例类必须自己创建自己的唯一实例。
3.单例类必须给所有其他对象提供这一实例。
作用和应用场景
在一个请求的生命周期中,往往需要对同一个类进行多次操作,而如果频繁的去 new 实例化对象,只会更多的消耗资源。应用场景多见于数据库的连接、日志等模块。
单例连接数据库
<?php
class Client
{
//设置静态属性用来存放实例化的类
private static $instance = null;
private $dbname = 'test';
private $username = 'root';
private $passwd = 'root';
private $host = 'localhost';
private $pdo = null;
//禁止类的外部实例化
private function __construct()
{
$this->pdo = new PDO("mysql:host={$this->host};dbname={$this->dbname}",$this->username,$this->passwd);
}
//禁止克隆对象
private function __clone(){}
//静态方法可不通过实例化在类的外部调用
public static function getInstance()
{
if(is_null(self::$instance)){
self::$instance = new self();
}
return self::$instance;
}
public function execSql($query = '')
{
$result = $this->pdo->exec($query);
if($result){
echo '执行成功';
}else{
echo '执行失败';
}
}
public function selectSql($query = '')
{
$result = $this->pdo->query($query);
return $result->fetchAll();
}
}
$client = Client::getInstance();
$client->selectSql('select * from xxx');
总结
单列模式不光是对系统资源的节省,更是在一个类多处使用时提供了一致性。该模式在多线程时会有安全性的问题,但因为 PHP 是单线程语言,这个问题一般开发也不会关注到,不过 PHP 也有实现多线程的方式,就是安装 pthreads 扩展,这个留到以后的多线程学习时再进行扩展。
网友评论