博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小蚂蚁学习APP接口开发(5)—— APP接口实例——单例模式连接数据库
阅读量:6266 次
发布时间:2019-06-22

本文共 1794 字,大约阅读时间需要 5 分钟。

hot3.png

单例模式三大原则

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

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

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

单例模式举例:

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

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

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

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

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

'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 '
';	print_r($arr);?>

转载于:https://my.oschina.net/woshixiaomayi/blog/518295

你可能感兴趣的文章
laravel安装初体验
查看>>
用yum查询想安装的软件
查看>>
TIJ -- 吐司BlockingQueue
查看>>
数据库分页查询
查看>>
[编程] C语言枚举类型(Enum)
查看>>
[Javascript] Compose multiple functions for new behavior in JavaScript
查看>>
ASP.NET MVC性能优化(实际项目中)
查看>>
ES6里关于类的拓展(一)
查看>>
零元学Expression Blend 4 - Chapter 46 三分钟快速充电-设定Margin的小撇步
查看>>
Format Conditions按条件显示表格记录
查看>>
RichTextBox指定全部文字显示不同颜色及部分文字高亮颜色显示
查看>>
mysql优化----explain的列分析
查看>>
Python正则表达式
查看>>
Java中CAS详解
查看>>
Spring Boot Unregistering JMX-exposed beans on shutdown
查看>>
命令行man的帮助手册
查看>>
Ubuntu 16.04下为Android编译OpenCV 3.2.0 Manager
查看>>
poi 导入导出的api说明(大全)
查看>>
Fix-Mapped Addresses
查看>>
fmt标签如何计算两个日期之间相隔的天数
查看>>