文档章节

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

嗜学如命的小蚂蚁
 嗜学如命的小蚂蚁
发布于 2015/10/17 16:56
字数 882
阅读 643
收藏 4
点赞 0
评论 0

单例模式三大原则

  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);
?>


© 著作权归作者所有

共有 人打赏支持
嗜学如命的小蚂蚁
粉丝 136
博文 161
码字总数 100864
作品 0
郑州
程序员
【设计模式】——命令模式

【情景展示】 在网络出现之前,我们的日常生活中,人与人的交际,一般使用语言沟通,然而社会在进步,随着城市化进程的加快,我们的生活发生了巨大的变化,如今的社会,人与人之间的交流方式...

u013043341 ⋅ 02/02 ⋅ 0

简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别

转载:原地址http://www.cnblogs.com/zhangchenliang/p/3700820.html 简单工厂、工厂方法、抽象工厂、策略模式、策略与工厂的区别 结合简单示例和UML图,讲解工厂模式简单原理。 一、引子 话说...

法斗斗 ⋅ 05/08 ⋅ 0

C#设计模式(2)——简单工厂模式

一、引言   这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式——简单工...

技术小胖子 ⋅ 2017/11/08 ⋅ 0

ES7 Decorator 装饰者模式

原作者:玄农 装饰模式 设计模式大家都有了解,网上有很多系列教程,比如 JS设计模式等等。 这里只分享 装饰者模式 以及在 如何使用 ES7 的 概念 装饰模式 v.s. 适配器模式 装饰模式和适配器...

_朴灵_ ⋅ 05/14 ⋅ 0

Java 设计模式(14) —— 复合模式

一、复合模式 模式常一起使用,组合在一个设计解决方案中 复合模式在一个解决方案中结合两个或多个模式,能解决一般性或一系列的问题 二、示例 本次设计模式讲解中无代码示例,由于复合模式是...

磊_lei ⋅ 05/26 ⋅ 0

JS单例模式《JavaScript设计模式与开发实践》阅读笔记

此文仅记录本人阅读《JavaScript设计模式与开发实践》这个本时的感受,感谢作者曾探写出这么好的一本书。如有冒犯,如有错误,请联系本人:luogao_lg@sina.com处理。 这一章让我知道了单例模...

RoyLuo ⋅ 05/17 ⋅ 0

设计模式笔记(八)——单例模式

是什么——定义 一个类只有一个对象实例。 2. 为什么——特点 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 3. 什么时候用——适用性 l 一个全局使用的类频繁地创建与销毁,而需...

LinkedBear ⋅ 04/11 ⋅ 0

代理模式(Proxy Pattern):动态代理 - 最易懂的设计模式解析

前言 今天我来全面总结开发中最常用的设计模式 - 代理模式中的动态代理模式 其他设计模式介绍 1分钟全面了解“设计模式” 单例模式(Singleton) - 最易懂的设计模式解析 简单工厂模式(Sim...

Carson_Ho ⋅ 04/09 ⋅ 0

java开发中的常用的设计模式

设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代...

qq_38024548 ⋅ 05/28 ⋅ 0

设计模式笔记(三)——建造者模式

需求矛盾 l 同一个厨师,可能每次炒的菜味道不一样! l 但全国各地的肯德基,味道都几乎一个味??? 思考: 1) 为什么我每次吃到的菜,味道都不一样?到底菜被什么控制了? 2) 为什么肯德基...

LinkedBear ⋅ 03/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

骰子游戏代码开源地址

因为阿里云现在服务器已经停用了,所以上面的配置已经失效。 服务端开源地址:https://gitee.com/goalya/chat4.git 客户端开源地址:https://gitee.com/goalya/client4.git 具体运行界面请参考...

算法之名 ⋅ 39分钟前 ⋅ 0

设计模式--装饰者模式

装饰者模式 定义 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 通用类图 意图 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比...

gaob2001 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部