php设计模式之单例模式
博客专区 > webphp 的博客 > 博客详情
php设计模式之单例模式
webphp 发表于3个月前
php设计模式之单例模式
  • 发表于 3个月前
  • 阅读 3
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

单例模式概念

单例模式是指整个应用中类只有一个对象实例的设计模式。

单例模式的特点

  • 一个类在整个应用中只有一个实例
  • 类必须自行创建这个实例
  • 必须自行向整个系统提供这个实例

单例模式的使用原因入使用场景

我们在开发的过程中用php大部分操作都是和各种数据库打交道,包括mysql,redis,memcache等各种关系型和非关系型数据库,所以一个应用中会 存在大量连接数据库的操作,如果不用单例模式,那每次都要new操作,但是每次new都会消耗大量的内存资源和系统资源,而且每次打开和关闭数据库连接都 是对数据库的一种极大考验和浪费。下面写出的一个实例:
<?php

class Db{
	//定义一个变量,在内部实例化的时候赋于一个变量
	static private $_instance;
	//数据库连接返回资源
	static private $_connectSource;
	private $_dbConfig = array(
			'host' => '127.0.0.1',
			'user' => 'root',
			'password' => '',
			'database' => 'dataname',
	);
	
	/*私有构造方法,防止被外部实例化*/
	private function __construct(){	
	}
	/*内部私有,防止被外面克隆*/
	private function __clone(){
	
	}
	/**
	 * 静态方法,单例访问统一入口
	 */
	static public function getInstance(){
		//利用instanceof检测是否被实例
		if(!(self::$_instance instanceof self)) {
			self::$_instance = new self();
		}
		return self::$_instance;
	}
	
	/**
	 * 创建连接数据库的方法,获取私用的连接属性
	 */
	public function connect(){
		if(!self::$_connectSource) {
			self::$_connectSource = @mysql_connect($this->_dbConfig['host'], $this->_dbConfig['user'], $this->_dbConfig['password']);			if(!self::$_connectSource) {
				die('mysql connect error' . mysql_error());
			}
			mysql_select_db($this->_dbConfig['database'], self::$_connectSource);
			mysql_query("set names UTF8", self::$_connectSource);
		}
		return self::$_connectSource;
		
	}

}

$connect = Db::getInstance()->connect();
var_dump( $connect );
 
需要一个保存类的唯一实例的静态成员变量(通常$instance为私有变量) 构造函数和克隆函数必须声明为私有的,为了防止外部程序new类从而失去单例模式意义 必须提供一个访问这个实例的公共静态方法,从而返回唯一实例的一个引用
共有 人打赏支持
粉丝 2
博文 88
码字总数 90487
×
webphp
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: