PHP实现单例模式建立数据库连接的方法分析


Posted in PHP onFebruary 11, 2020

本文实例讲述了PHP实现单例模式建立数据库连接的方法。分享给大家供大家参考,具体如下:

理解php单例模式

一、什么是单例

wiki百科:单例模式,也叫单子模式,是一种常用的软件设计模式。 在应用这个模式时,单例对象的类必须保证只有一个实例存在。 许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。

二、为什么用单例

实际项目中像数据库查询,日志输出,全局回调,统一校验等模块。这些模块功能单一,但需要多次访问,如果能够全局唯一,多次复用会大大提升性能。这也就是单例存在的必要性。

三、单例模式的好处

1:减少频繁创建,节省了cpu。

2:静态对象公用,节省了内存。

3:功能解耦,代码已维护。

四、如何设计单例

通过上面的描述,单例的核心是,实例一次生成,全局唯一,多次调用。因此在单例模式必须包含三要素:

1:私有化构造函数,私有化clone。也就是不能new,不能clone。【唯一】

2:拥有一个静态变量,用于保存当前的类。【唯一如何保存】

3:提供一个公共的访问入口。【可以访问】

五、建立数据库连接

PS:功能上不太完整,以后再补充**__**

/**
 * 单例模式连接数据库--面向对象
 * */
//final关键字阻止此类被继承
final class sql2
{
  static $instance;
  static $connect;
  protected $result;
  //protected关键字阻止此类在外部进行实例化
  protected function __construct($host, $user, $password)
  {
    self::$connect = @new mysqli($host, $user, $password);
    if (self::$connect->connect_errno) {
      die(iconv('gbk', 'utf-8', self::$connect->connect_error) . '(' . self::$connect->connect_errno . ')');
    }
  }
  //protected关键字阻止此类在外部进行克隆
  protected function __clone()
  {
  }
  //当对象被销毁时关闭连接
  function __destruct()
  {
    self::$connect->close();
  }
  //获取实例
  static function getInstance($host, $user, $password)
  {
    self::$instance = self::$instance ?: new self($host, $user, $password);
    return self::$instance;
  }
  //选择数据库
  function set_db($db)
  {
    if (!self::$connect->select_db($db)) {
      die(iconv('gbk', 'utf-8', self::$connect->error) . '(' . self::$connect->errno . ')');
    }
  }
  //执行SQL语句
  function query($query)
  {
    if (!($re = self::$connect->query($query))) {
      die(iconv('gbk', 'utf-8', self::$connect->error) . '(' . self::$connect->errno . ')');
    }
    $this->result = $re;
    return $re;
  }
  //以数组形式返回查询结果
  function fetch_arr($query)
  {
    $re = $this->query($query);
    $res = [];
    while ($row = $re->fetch_assoc()) {
      $res[] = $row;
    }
    return $res;
  }
  //获取记录数
  function get_row()
  {
    return $this->result->num_rows;
  }
}
$ins = sql2::getInstance('127.0.0.1', 'root', 'root');
$ins->set_db('houtai');
$re = $ins->fetch_arr('select * from user ');
//var_dump($re);
$ins->get_row();

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP怎样调用MSSQL的存储过程
Oct 09 PHP
PHP编码规范之注释和文件结构说明
Jul 09 PHP
php操作mysqli(示例代码)
Oct 28 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
May 10 PHP
PHP正则表达式入门教程(推荐)
May 18 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
php实现文章置顶功能的方法
Oct 20 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
Feb 15 PHP
PHP封装curl的调用接口及常用函数详解
May 31 PHP
Laravel如何实现适合Api的异常处理响应格式
Jun 14 PHP
基于PHP实现用户登录注册功能的详细教程
Aug 04 PHP
PHP判断是否是json字符串
Apr 01 PHP
php-7.3.6 编译安装过程
Feb 11 #PHP
PHP实现Markdown文章上传到七牛图床的实例内容
Feb 11 #PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
Feb 10 #PHP
tp5框架基于ajax实现异步删除图片的方法示例
Feb 10 #PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
Feb 10 #PHP
tp5框架使用cookie加密算法实现登录功能示例
Feb 10 #PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
Feb 10 #PHP
You might like
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
location.href 在IE6中不跳转的解决方法与推荐使用代码
2010/07/08 Javascript
Javascript的getYear、getFullYear、getUTCFullYear异同分享
2011/11/30 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
js中数组Array的一些常用方法总结
2013/08/12 Javascript
js正则匹配出所有图片及图片地址src的方法
2015/06/08 Javascript
JS封装cookie操作函数实例(设置、读取、删除)
2015/11/17 Javascript
基于javascript实现简单的抽奖系统
2020/04/15 Javascript
js获取新浪天气接口的实现代码
2016/06/06 Javascript
js与jquery正则验证电子邮箱、手机号、邮政编码的方法
2016/07/04 Javascript
Javascript日期格式化format函数的使用方法
2016/08/30 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
jQuery+SpringMVC中的复选框选择与传值实例
2018/01/08 jQuery
nodejs结合Socket.IO实现的即时通讯功能详解
2018/01/12 NodeJs
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
Vue render渲染时间戳转时间,时间转时间戳及渲染进度条效果
2018/07/27 Javascript
JS定义函数的几种常用方法小结
2019/05/23 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
纯js实现无缝滚动功能代码实例
2020/02/21 Javascript
深入理解 ES6中的 Reflect用法
2020/07/18 Javascript
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
Python的Django框架中设置日期和字段可选的方法
2015/07/17 Python
Python 通过URL打开图片实例详解
2017/06/01 Python
Python面向对象之继承代码详解
2018/01/29 Python
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
对tf.reduce_sum tensorflow维度上的操作详解
2018/07/26 Python
浅谈python中get pass用法
2019/03/19 Python
python 使用socket传输图片视频等文件的实现方式
2019/08/07 Python
Python 中的pygame安装与配置教程详解
2020/02/10 Python
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
敲诈同学钱财检讨书范文
2014/11/18 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
家庭聚会祝酒词
2015/08/11 职场文书
解析在浏览器地址栏输入一个URL后发生了什么
2021/06/21 Servers