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小偷的核心程序
Apr 09 PHP
PHP调用MySQL的存储过程的实现代码
Aug 12 PHP
PHP url 加密解密函数代码
Aug 26 PHP
php IP转换整形(ip2long)的详解
Jun 06 PHP
php类声明和php类使用方法示例分享
Mar 29 PHP
PHP正则表达式之捕获组与非捕获组
Nov 06 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
Dec 18 PHP
PHP递归遍历指定文件夹内的文件实现方法
Nov 15 PHP
tp5实现微信小程序多图片上传到服务器功能
Jul 16 PHP
PHP常用字符串函数小结(推荐)
Aug 05 PHP
php实现数组中出现次数超过一半的数字的统计方法
Oct 14 PHP
laravel实现简单用户权限的示例代码
May 28 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(3) php 函数
2010/02/15 PHP
mysql_escape_string()函数用法分析
2016/04/25 PHP
PHP strripos函数用法总结
2019/02/11 PHP
Iframe thickbox2.0使用的方法
2009/03/05 Javascript
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
Windows系统下使用Sublime搭建nodejs环境
2015/04/13 NodeJs
JS实现仿腾讯微博无刷新删除微博效果代码
2015/10/16 Javascript
jQuery使用animate实现ul列表项相互飘动效果示例
2016/09/16 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
2016/12/13 Javascript
浅谈vue实现数据监听的函数 Object.defineProperty
2017/06/08 Javascript
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
Nodejs 和Session 原理及实战技巧小结
2017/08/25 NodeJs
Angular 4.0学习教程之架构详解
2017/09/12 Javascript
vue: WebStorm设置快速编译运行的方法
2018/10/18 Javascript
详解用场景去理解函数柯里化(入门篇)
2019/04/11 Javascript
javascript关于“时间”的一次探索
2019/07/24 Javascript
layui 上传图片 返回图片地址的方法
2019/09/26 Javascript
微信sdk实现禁止微信分享(使用原生php实现)
2019/11/15 Javascript
jQuery实现穿梭框效果
2021/01/19 jQuery
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
在Windows系统上搭建Nginx+Python+MySQL环境的教程
2015/12/25 Python
浅谈Python数据类型之间的转换
2016/06/08 Python
scrapy爬虫完整实例
2018/01/25 Python
Pycharm 操作Django Model的简单运用方法
2018/05/23 Python
Python XlsxWriter模块Chart类用法实例分析
2019/03/11 Python
世界上最大的在线学习和教学市场:Udemy
2017/11/08 全球购物
化石印度尼西亚在线商店:Fossil Indonesia
2019/03/11 全球购物
报关简历自我评价怎么写
2013/09/19 职场文书
总经理岗位职责
2013/11/09 职场文书
红领巾广播站广播稿
2014/02/01 职场文书
小学生运动会报道稿
2014/09/12 职场文书
品质保证书格式
2015/02/28 职场文书
2015年端午节活动方案
2015/05/05 职场文书
MySQL性能指标TPS+QPS+IOPS压测
2022/08/05 MySQL