单例模式
单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案,例如数据库资源,就可以使用单例来获得数据库资源
简而言之,单例就是:一个类有且仅有一个实例,并且自行实例化向整个系统提供
单例模式需要满足的条件:
- 单例模式的类的构造方法必须是私有的,防止外部实力化
- 类中含有一个静态属性指向本类的唯一实例化
- 类中含有一个静态方法创建或者获取本类的静态属性
满足以上3点,即是单例模式,这里我有一个mysqli连接的单例小例子,供参考:
<?php
/**
* 数据库单例类(针对mysqli实现)
*/
class DB{
private static $_instance; //单例对象引用
private static $_resource; //数据库资源
private $db_config = array( //数据库配置
'db_host' => 'localhost', //数据库地址
'db_user' => 'root', //用户名
'db_pwd' => 'sanyue', //密码
'db_name' => 'marchsoftv3' //数据库名
) ;
//私有构造方法,防止实例化
private function __construct(){}
//类方法获取实例引用
public static function get_instance()
{
//判断是否存在唯一实例,若不存在则实例化
if(!(self::$_instance instanceof self))
{
self::$_instance = new self();
}
//返回唯一实例的引用
return self::$_instance;
}
//连接数据库
public function connect()
{
if(!self::$_resource)
{
//实例化mysqli连接数据库
self::$_resource = new mysqli($this->db_config['db_host'],$this->db_config['db_user'],$this->db_config['db_pwd'],$this->db_config['db_name']);
if(!self::$_resource)
{
die('mysqli connect error'.mysqli_connect_error());
}
self::$_resource->query('set names utf8');
}
//返回数据库资源
return self::$_resource;
}
}
?>