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变量范围介绍
Oct 15 PHP
php使用codebase生成随机数
Mar 25 PHP
PHP判断是否有Get参数的方法
May 05 PHP
ThinkPHP CURD方法之order方法详解
Jun 18 PHP
php中实现精确设置session过期时间的方法
Jul 17 PHP
PHP从二维数组得到N层分类树的实现代码
Oct 11 PHP
php的laravel框架快速集成微信登录的方法
Dec 12 PHP
form表单传递数组数据、php脚本接收的实例
Feb 09 PHP
PHP实现基于PDO扩展连接PostgreSQL对象关系数据库示例
Mar 31 PHP
PHP连接MySQL数据库并以json格式输出
May 21 PHP
PHP+MySQL实现模糊查询员工信息功能示例
Jun 01 PHP
php实现微信分享朋友链接功能
Feb 18 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 fopen()和 file_get_contents()应用与差异介绍
2014/03/19 PHP
dedecms函数分享之获取某一栏目所有子栏目
2014/05/19 PHP
Div自动滚动到末尾的代码
2008/10/26 Javascript
jQuery的写法不同导致的兼容性问题的解决方法
2010/07/29 Javascript
JavaScript自定义方法实现trim()、Ltrim()、Rtrim()的功能
2013/11/03 Javascript
使用jquery自定义鼠标样式满足个性需求
2013/11/05 Javascript
深入探密Javascript数组方法
2015/01/08 Javascript
JQuery实现Ajax加载图片的方法
2015/12/24 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
JS控制静态页面传递参数并获取参数应用
2016/08/10 Javascript
深入理解jquery中extend的实现
2016/12/22 Javascript
利用require.js与angular搭建spa应用的方法实例
2017/07/19 Javascript
nodejs body-parser 解析post数据实例
2017/07/26 NodeJs
JS使用遮罩实现点击某区域以外时弹窗的弹出与关闭功能示例
2018/07/31 Javascript
浅谈Vue的响应式原理
2019/05/30 Javascript
原生javascript制作的拼图游戏实现方法详解
2020/02/23 Javascript
Python数据可视化:泊松分布详解
2019/12/07 Python
PyCharm下载和安装详细步骤
2019/12/17 Python
Python基础之字符串常见操作经典实例详解
2020/02/26 Python
Python+OpenCV图像处理——实现轮廓发现
2020/10/23 Python
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
Linux内核的同步机制是什么?主要有哪几种内核锁
2016/07/11 面试题
酒店工作职员求职简历的自我评价
2013/10/23 职场文书
农业资源与环境专业自荐信范文
2013/12/30 职场文书
装修致歉信
2014/01/15 职场文书
《巨人的花园》教学反思
2014/02/12 职场文书
自荐信的格式
2014/03/10 职场文书
结婚喜宴主持词
2014/03/14 职场文书
班主任工作经验交流材料
2014/05/13 职场文书
白酒营销策划方案
2014/08/17 职场文书
教师个人总结范文
2015/02/11 职场文书
实施意见格式范本
2015/06/05 职场文书
功夫熊猫观后感
2015/06/10 职场文书
安全教育主题班会教案
2015/08/12 职场文书
高二语文教学反思
2016/02/16 职场文书
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python