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 相关文章推荐
建立文件交换功能的脚本(三)
Oct 09 PHP
逐步提升php框架的性能
Jan 10 PHP
在PHP中使用反射技术的架构插件使用说明
May 18 PHP
windows环境下php配置memcache的具体操作步骤
Jun 09 PHP
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
Jun 28 PHP
举例详解PHP脚本的测试方法
Aug 05 PHP
Yii中的relations数据关联查询及统计功能用法详解
Jul 14 PHP
利用PHP访问带有密码的Redis方法示例
Feb 09 PHP
php+ajax实现商品对比功能示例
Apr 13 PHP
PHP面向对象程序设计之对象的遍历操作示例
Jun 12 PHP
php并发加锁问题分析与设计代码实例讲解
Feb 26 PHP
thinkphp5 路由分发原理
Mar 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
phpwind中的数据库操作类
2007/01/02 PHP
php 按指定元素值去除数组元素的实现方法
2011/11/04 PHP
php安装swoole扩展的方法
2015/03/19 PHP
smarty模板引擎之分配数据类型
2015/03/30 PHP
php 删除一维数组中某一个值元素的操作方法
2018/02/01 PHP
几款极品的javascript压缩混淆工具
2007/05/16 Javascript
javascript 子窗体父窗体相互传值方法
2010/05/31 Javascript
qq悬浮代码(兼容各个浏览器)
2014/01/29 Javascript
RequireJS多页面应用实例分析
2016/06/29 Javascript
JavaScript观察者模式(publish/subscribe)原理与实现方法
2017/03/30 Javascript
微信小程序 支付功能实现PHP实例详解
2017/05/12 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
一步一步的了解webpack4的splitChunk插件(小结)
2018/09/17 Javascript
layui表单验证select下拉框实现验证的方法
2019/09/05 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
Django小白教程之Django用户注册与登录
2016/04/22 Python
Python实现修改文件内容的方法分析
2018/03/25 Python
python检测文件夹变化,并拷贝有更新的文件到对应目录的方法
2018/10/17 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
Pytorch释放显存占用方式
2020/01/13 Python
Python对wav文件的重采样实例
2020/02/25 Python
Python之字典对象的几种创建方法
2020/09/30 Python
HTML5中判断用户是否正在浏览页面的方法
2014/05/03 HTML / CSS
丝芙兰法国官网:SEPHORA法国
2016/09/01 全球购物
Vision Directa智利眼镜网:框架眼镜、隐形眼镜和名牌太阳眼镜
2016/11/23 全球购物
澳大利亚首屈一指的在线购物目的地:Kogan.com
2017/02/02 全球购物
乔丹诺(Giordano)酒庄德国官网:找到最好的意大利葡萄酒
2017/12/28 全球购物
Desigual美国官方网站:西班牙服装品牌
2019/03/29 全球购物
介绍一下XMLHttpRequest对象
2012/02/12 面试题
大学生个人求职信范文
2013/09/21 职场文书
业务总经理岗位职责
2014/02/03 职场文书
机工车间主任岗位职责
2014/03/05 职场文书
教师评语大全
2014/04/28 职场文书
公司委托书格式范文
2014/10/09 职场文书
错误码NET::ERR_CERT_DATE_INVALID证书已过期解决方法?
2022/07/07 数码科技