文档章节

小蚂蚁学习APP接口开发(5)—— APP接口实例——单例模式连接数据库

嗜学如命的小蚂蚁
 嗜学如命的小蚂蚁
发布于 2015/10/17 16:56
字数 882
阅读 651
收藏 4

单例模式三大原则

  1. 构造函数需要标记为非public(防止外部使用new来操作符常见对象)。单例类不能在其他类中实例化,只能被其自身实例化。

  2. 拥有一个保存类的实例的静态成员变量$_instance(这个变量是一个约定俗成的规范,大家一看就知道是单例模式)。

  3. 拥有一个访问这个实例的公共的静态方法。

单例模式举例:

<?php
/********************************
*
*	单例模式举例说明
*	学php的小蚂蚁
*	原创博客 http://my.oschina.net/woshixiaomayi/blog	
*
***************************/
class Db{
	
	//保存实例化的对象
	private static $_instance;

	//将构造成员设置为私有,禁止外部实例化
	private function __construct(){

	}

	//实例化入口
	public static function getInstance(){
		/*
			查看是否已经实例化了,如果已经实例化了就直接返回,
			没有实例化则实例化。保证只能实例化1次
		*/	
		if(!(self::$_instance instanceof self)){
			//没有实例化,这进行实例化
			self::$_instance	=	new Db();
		}
		//将实例化的对象返回
		return  self::$_instance;
	}
}
?>

那么单例模式有什么优点,我们为什么要使用单例模式呢?

  1. php的应用主要在于数据库的应用,所以一个应用中会存在大量的数据库操作,使用单例模式,则可以避免大量的new操作,节约资源。

  2. 如果系统中需要有一个类来全局控制某些配置信息,那么使用单例模式可以很方便的实现。

  3. 在一次页面请求中,便于进行调试,因为所有的代码(例如数据库db操作类)都集中于一个类中,我们可以在类中设置钩子,输出日志,从而避免了到处var_dump(),echo ()等等。

接下来用单例模式来丰满这个db类:

<?php
/********************************
*
*	单例模式开发db库
*	学php的小蚂蚁
*	原创博客 http://my.oschina.net/woshixiaomayi/blog
*
***************************/
class Db{
	
	//保存实例化的对象
	private static $_instance;

	//保存数据库连接资源
	private static $_connectSourse;

	//数据库配置属性
	private $dbConfig	=	array(
			'host'		=>	'127.0.0.1',	//	主机ip
			'name'		=>	'root',			//	用户名
			'password'	=>	'123456',		//	密码
			'database'	=>	'biicai'		//	操作的数据库	
		);

	//将构造成员设置为私有,禁止外部实例化
	private function __construct(){

	}

	//实例化入口
	public static function getInstance(){
		/*
			查看是否已经实例化了,如果已经实例化了就直接返回,
			没有实例化则实例化。保证只能实例化1次
		*/	
		if(!(self::$_instance instanceof self)){
			//没有实例化,这进行实例化
			self::$_instance	=	new Db();
		}
		//将实例化的对象返回
		return  self::$_instance;
	}

	//连接数据库
	public function connect(){
		//判断是否已经连接数据库,保证只连接一次
		if(!self::$_connectSourse){
			//获取连接数据库的资源
			self::$_connectSourse	=	mysql_connect($this->dbConfig['host'],$this->dbConfig['name'],$this->dbConfig['password']);
			//如果没有连接上数据库,需要抛出一个异常
			if(!self::$_connectSourse){
				throw new Exception('mysql connect error'.mysql_error);
			}
			//设置要操作的数据库
			mysql_select_db($this->dbConfig['database'],self::$_connectSourse);
			//设置数据库的字符集
			mysql_query('set names UTF8',self::$_connectSourse);
		}
		//将数据库连接资源返回
		return self::$_connectSourse;
	}
}

	//得到连接数据库的资源
	$connect=Db::getInstance()->connect();
	//var_dump($connect);	resource(2) of type (mysql link) 
	//编写sql语句
	$sql='select user_name from ecm_member limit 5';
	//执行sql语句,得到一个结果集
	$result	=	mysql_query($sql,$connect);
	//var_dump($result); resource(3) of type (mysql result) 
	$arr=array();
	while($row=mysql_fetch_assoc($result)){
		$arr[]=$row;
	}
	echo '<pre>';
	print_r($arr);
?>


© 著作权归作者所有

共有 人打赏支持
嗜学如命的小蚂蚁
粉丝 142
博文 161
码字总数 100864
作品 0
郑州
程序员
私信 提问
阿里P7大牛细说架构——设计模式专栏

设计模式介绍 对于有经验的开发人员,学习设计模式有助于我们找到在软件开发过程中所面临的问题的最佳解决方案。一直以来软件都是为了用来解决现实生活中遇到的复杂问题而存在,设计模式(D...

别打我会飞
11/25
0
0
编程中的那些套路——关于单例模式

该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言PHP 在设计模式中,单例模式和工厂模式)可以说是使用的最普遍的设计模式了,所以掌握此种模式尤为重要。 单...

gzchen
08/27
0
0
编程中的那些套路——关于工厂模式

该文章属于《编程中的那些经典套路——设计模式汇总》系列,并且以下内容基于语言PHP 前面我们写了简单工厂模式,《编程中的那些套路——关于简单工厂模式》,但简单工厂模式有一些不足(违反...

gzchen
08/27
0
0
Java设计模式之抽象工厂模式

抽象工厂模式特点 抽象工厂模式与工厂模式最大的区别是每个单独的产品是一个工厂模式,而多个不同产品交互则是抽象工厂模式,抽象工厂模式通常要运用工厂模式的方法。通常,工厂模式的所有产...

断桥残雪断桥残雪
2015/08/09
0
0
练就Java24章真经—你所不知道的工厂方法

前言 最近一直在Java方向奋斗《终于,我还是下决心学Java后台了》,今天抽空开始学习Java的设计模式了 。计划有时间就去学习,你这么有时间,还不来一起上车吗? 之所以要学习Java模式,是因...

codeGoogle
10/30
0
0

没有更多内容

加载失败,请刷新页面

加载更多

基于对象特征的推荐

(本实验选用数据为真实电商脱敏数据,仅用于学习,请勿商用) 在上一期基于协同过滤的的推荐场景中,我们介绍了如何通过PAI快速搭建一个基于协同过滤方案的推荐系统,这一节会介绍一些如何基...

阿里云官方博客
7分钟前
0
0
Ugly Number(leetcode263)

Write a program to check whether a given number is an ugly number. Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. Example 1: Input: 6Output: true......

woshixin
31分钟前
2
0
深度模型从研者 眼里的 似然估计 & Hessain 海森矩阵 & Fisher Information (费雪信息)

深度模型的训练的基本依据是最小化模型拟合数据的误差。旨在不仅知其然(如何构建和训练一个深度模型),还应知其所以然(为什么这样训练,可以做哪些优化)。我们就会发现,有很多研究者,在...

刘小米_思聪
35分钟前
0
0
【双十二】12 月 12 日 12 点 12 分限量抢福利,云计算不剁手!

活动详情 1.首充豪礼 双十二当日,新用户首充 200 元送 200 元代金券!仅限前 88 名!先到先得!拼手速!(新用户指 12 月 12 日前已完成注册但从未充值过的用户)
 2.超值返券 双十二当日,...

七牛云
今天
4
0
Calculate Linux 发布 18 LXQt是基于Gentoo的发行版

导读 Calculate Linux 是一个基于 Gentoo 并与 Gentoo 完全兼容的滚动更新发行版家族,专为企业环境下的快速部署而优化。其提供多个不同的分支版本,分别适用于桌面、服务器等应用场景。该项...

问题终结者
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部