单例模式的意义在于,很多时候不需要创建重复的实例。
用PHP实现单例模式的原理是,使用一个静态变量存储实例,当遇到重复的“new”操作时,直接返回静态变量中存储的实例。
典型的应用有数据库类,请看代码:
<?php
class DB{
//用来存储实例的静态变量
public static $instance;
//记录实例的个数
public static $num = 0;
public function __construct(){
//如果实例已经存在,直接返回
if(self::$instance){
return self::$instance;
}
//创建数据库连接
$con = mysql_connect(‘localhost‘,‘root‘,‘root‘);
mysql_select_db(‘test‘);
//实例计数器加一
self::$num++;
//将实例存储到静态变量
self::$instance = $this;
}
//示例方法
public function query(){
}
}
?>
这样就用单例模式实现了一个数据库类,我还使用了一个静态变量 $num ,作用是检测单例模式有没有起作用。使用下面的代码可以检测:
<?php $db = new DB(); //输出为1 echo DB::$num; echo ‘<br/>‘; $db2 = new DB(); //输出为1 说明没有重复创建实例 echo DB::$num; echo ‘<br/>‘; //输出为1 说明两个实例是同一个 echo $db == $db2; ?>
不管使用多少次“new” 操作,在同一个页面中始终只有一个实例存在,这就是我们想要的结果~
原文:http://my.oschina.net/crazymus/blog/517953