单例模式的意义在于,很多时候不需要创建重复的实例。
用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