codetc - 网站开发技术 首页 后端 查看内容

PHP中单例模式的使用

2015-1-25 13:32| 发布者: CODETC| 查看: 1457| 评论: 0

单例模式按字面来看就是指某一个类只存在一个实例,这一点其实是与静态方法是相同的,只存在一个实例的好处是当我们需要使用某个类时只需要实例化一次,不需要每次都去new,极大的降低了资源的耗费,比如说数据库的连接类。


那么单例模式与静态方法有什么区别呢?

个人观点,如果不存在比较复杂的事务管理,用singleton会比较好,原因有三:

1、单例可以继承类,实现接口,而静态类不能(可以集成类,但不能集成实例成员);
2、单例可以被延迟初始化,静态类一般在第一次加载是初始化;
3、单例模式在使用中比静态方法更灵活;


虽然这样说,但到底该选用单例还是静态,我们还需要视实际情况而定,在设计模式中我们应该做到的是:减少代码,增加稳定,方便理解,提升性能,减少开销。

扯远了,下面我们说回PHP中单例模式的使用。

单例类至少拥有以下三种公共元素:

1、必须拥有一个构造函数,并且必须被标记为private。
2、拥有一个保存类的实例的静态成员变量。
3、拥有一个访问这个实例的公共的静态方法。


具体使用例子:

<?php
/**
 * by www.codetc.com
 */
class Mysql{
	//该属性用来保存实例
	private static $instance;
	private $conn;
	//构造函数为private,防止创建对象
	private function __construct(){
		$this->conn = mysql_connect('localhost','root','123456');
		//...
	}
	//创建一个用来实例化对象的方法
	public static function getInstance(){
		if(!(self::$instance instanceof self)){
			self::$instance = new self;
		}
		return self::$instance;
	}
	//防止对象被复制
	public function __clone(){
		trigger_error('Clone is not allowed !');
	}
	//...
	public function query(){
		//do something
	}
}
//使用单例调用类中的方法,不能new 和 clone
Mysql::getInstance()->query();
?>
文章来源 CODETC,欢迎分享,转载请注明地址: http://www.codetc.com/article-128-1.html

最新评论

 作为游客发表评论,请输入您的昵称

返回顶部