单例模式(Singl
eton pattern)是一种常用的软件设计模式。在它的核心结构中只包含
一个被称为单例类的特殊类。通过单例模式可以保证系统中
一个类只有
一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在
一个,单例模式是最好的
解决方案。 如何保证
一个类只有
一个实例并且这个实例易于被访问呢?定义
一个全局变量可以确保对象随时都可以被访问,但不能防止我们实例化多个对象。
一个更好的
解决办法是让类自身负责保存它的唯一实例。这个类可以保证没有其他实例被创建,并且它可以提供
一个访问该实例的
方法。这就是单例模式的模式动机。 例如我们在
PHP的开发过程中我们创建了
一个db类(
数据库操作类),那么我们希望再
一个PHP文件中
一个数据库只被连接一次而
一个PHP文件中也只需要
一个数据库对象!因为多次连接
数据库会大大降低
PHP的执行效率。也会带来极大的系统开销! 使用单例模式来封装你的
数据库吧
<?PHP
class db
{
//使用一个静态变量记录db对象初始化时为null
public static $db = null;
/* 私有构造函数是类无法完成外部的调用
* 意味着您将无法使用 $xx = new db();
*/
private function __construct(){
echo '连接数据库....';
}
/*
* 使用静态方法去获取数据对象
* 获取时先判断db对象是否已经存在,如果存在则直接返回db对象反正则创建这个对象
*/
public static function getInstance(){
if(self::$db == null){
self::$db = new db();
}
return self::$db;
}
public function query($sql){
echo '执行sql命令';
}
public function __destruct(){
echo '关闭数据库连接....';
}
}
$db = db::getInstance();
$db1 = db::getInstance();
$db->query('test');
$db2 = db::getInstance();
//输出 : 连接数据库....执行sql命令关闭数据库连接....
//可以看到不论我们获取多少次db对象,虽然他们名称不同,但都代表着同一个对象!这样就实现单例模式!