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中比较简单的导入phpmyadmin生成的sql文件的方法
Jun 28 PHP
PHP去掉从word直接粘贴过来的没有用格式的函数
Oct 29 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
Jun 26 PHP
PHP解码unicode编码的中文字符代码分享
Aug 13 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
Sep 10 PHP
PHP页面实现定时跳转的方法
Oct 31 PHP
php根据某字段对多维数组进行排序的方法
Mar 07 PHP
PHP实现根据图片色界在不同位置加水印的方法
Aug 08 PHP
php 使用curl模拟登录人人(校内)网的简单实例
Jun 06 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
Sep 27 PHP
PHP封装的mysqli数据库操作类示例
Feb 16 PHP
Yii框架学习笔记之session与cookie简单操作示例
Apr 30 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边学边教》(02.Apache+PHP环境配置――上篇)
2006/12/13 PHP
PHP中使用hidef扩展代替define提高性能
2015/04/09 PHP
理解PHP中的Session及对Session有效期的控制
2016/01/08 PHP
Jquery实现的tab效果可以指定默认显示第几页
2013/10/16 Javascript
使用jQuery的attr方法来修改onclick值
2014/07/07 Javascript
Jquery中find与each方法用法实例
2015/02/04 Javascript
浅谈angularJS 作用域
2015/07/05 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
基于JS实现EOS隐藏错误提示层代码
2016/04/25 Javascript
jQuery on()方法绑定动态元素的点击事件无响应的解决办法
2016/07/07 Javascript
在windows上用nodejs搭建静态文件服务器的简单方法
2016/08/11 NodeJs
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
element 结合vue 在表单验证时有值却提示错误的解决办法
2018/01/22 Javascript
vue将对象新增的属性添加到检测序列的方法
2018/02/24 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
[00:12]DAC2018 天才少年转战三号位,他的SOLO是否仍如昔日般强大?
2018/04/06 DOTA
python操作sqlite的CRUD实例分析
2015/05/08 Python
python 默认参数问题的陷阱
2016/02/29 Python
Python使用PyCrypto实现AES加密功能示例
2017/05/22 Python
python对Excel按条件进行内容补充(推荐)
2019/11/24 Python
Python count函数使用方法实例解析
2020/03/23 Python
keras做CNN的训练误差loss的下降操作
2020/06/22 Python
利用Python实现字幕挂载(把字幕文件与视频合并)思路详解
2020/10/21 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
Ray-Ban雷朋西班牙官网:全球领先的太阳眼镜品牌
2018/11/28 全球购物
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
应届生骨科医生求职信
2013/10/31 职场文书
元宵晚会主持词
2014/03/25 职场文书
机械系毕业生求职信
2014/05/28 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
乡镇保密工作承诺书
2015/05/04 职场文书
幼儿园托班开学寄语(2015秋季)
2015/05/27 职场文书
巴黎圣母院观后感
2015/06/10 职场文书
广播稿:校园广播稿范文
2019/04/17 职场文书
java开发双人五子棋游戏
2022/05/06 Java/Android