文档章节

php设计模式之单例模式

webphp
 webphp
发布于 2017/07/26 11:28
字数 525
阅读 5
收藏 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类从而失去单例模式意义 必须提供一个访问这个实例的公共静态方法,从而返回唯一实例的一个引用
webphp
粉丝 1
博文 92
码字总数 92338
作品 0
海淀
程序员
私信 提问
加载中
请先登录后再评论。

暂无文章

golang 打印程序的启动流程。runtime 包示例。

package mainimport ( "fmt""runtime")func main() { for skip := 0; ; skip++ { pc, file, line, ok := runtime.Caller(skip) if !ok { break......

osc_wuji6g86
13分钟前
10
0
JAVA互联网架构师专题/分布式/高并发/微服务【第三期】

JAVA互联网架构师专题/分布式/高并发/微服务【第三期】 下载地址:百度云盘 全新打造60W年薪架构师课程,4年磨一剑,10次课程升级改版 课程内容涉及Java互联网一线大厂技术、源码框架 性能调...

1930133570
14分钟前
0
0
网站优化与推广排名受哪些因素的影响?

 现今从事网站关键词优化的企业数量变得越来越多,同时很多行业核心关键词排名竞争也变得十分激烈,因此做网络SEO的时候,要注重诸多的优化细节,这样才能够保证关键词排名可以稳定增长,那...

小苏seo
14分钟前
0
0
通过python调用jenkins-cli实现快速发布

通过python调用jenkins-cli实现快速发布 下载jenkins-cli.jar 登录jenkins页面,进入【系统管理】-【jenkins命令行接口】,点击截图中内容即可下载jar包文件。 编写jks-autodeploy.py文件,内...

osc_l89li1g7
15分钟前
0
0
JVM学习笔记之类装载器-ClassLoader

JVM学习笔记之类装载器-ClassLoader 本文字数:2300,阅读耗时7分钟 JVM体系结构概览 类装载器ClassLoader: 负责加载class文件,class文件在文件开头有特定的文件标识,将class文件字节码内容...

中凯_凯哥java
15分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部