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 相关文章推荐
SSI指令
Nov 25 PHP
一周学会PHP(视频)Http下载
Dec 12 PHP
php 删除无限级目录与文件代码共享
Nov 22 PHP
PHP MVC模式在网站架构中的实现分析
Mar 04 PHP
php环境无法上传文件的解决方法
Apr 30 PHP
php集成环境xampp中apache无法启动问题解决方案
Nov 18 PHP
php从数组中随机选择若干不重复元素的方法
Mar 14 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
Apr 21 PHP
php实现mysql数据库连接操作及用户管理
Nov 08 PHP
PHP+JS实现的商品秒杀倒计时用法示例
Nov 15 PHP
PHP连接MYSQL数据库的3种常用方法
Feb 27 PHP
laravel框架如何设置公共头和公共尾
Oct 22 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
Yii配置与使用memcached缓存的方法
2016/07/13 PHP
thinkPHP3.2.2框架行为扩展及demo示例
2018/06/19 PHP
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
JS类的封装及实现代码
2009/12/02 Javascript
基于jquery.Jcrop的头像编辑器
2010/03/01 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
用JavaScript修改CSS属性的代码
2013/05/06 Javascript
jquery实现控制表格行高亮实例
2013/06/05 Javascript
JavaScript打印iframe内容示例代码
2013/08/20 Javascript
JS实现很酷的水波文字特效实例
2015/02/26 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
javascript常用函数(2)
2015/11/05 Javascript
js实现C#的StringBuilder效果完整实例
2015/12/22 Javascript
JavaScript每天必学之基础知识
2016/09/17 Javascript
Ajax 加载数据 练习代码
2017/01/05 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
VUE中使用Vue-resource完成交互
2017/07/21 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
vue 数组和对象不能直接赋值情况和解决方法(推荐)
2017/10/25 Javascript
微信小程序将页面按钮悬浮固定在底部的实现代码
2020/10/29 Javascript
python实现决策树C4.5算法详解(在ID3基础上改进)
2017/05/31 Python
python使用SMTP发送qq或sina邮件
2017/10/21 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
python socket 聊天室实例代码详解
2019/11/14 Python
python with (as)语句实例详解
2020/02/04 Python
python 解压、复制、删除 文件的实例代码
2020/02/26 Python
使用python处理题库表格并转化为word形式的实现
2020/04/14 Python
Python装饰器结合递归原理解析
2020/07/02 Python
data:image data url 文件转为Blob上传后端的方法
2019/07/16 HTML / CSS
委托书模板
2014/04/04 职场文书
护士工作失误检讨书
2014/09/14 职场文书
领导干部群众路线教育实践活动剖析材料
2014/10/10 职场文书
大学生入党自荐书
2015/03/05 职场文书
幼儿园重阳节活动总结
2015/05/05 职场文书
麦田里的守望者读书笔记
2015/06/30 职场文书
Nginx反向代理、重定向
2022/04/13 Servers