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 相关文章推荐
关于时间计算的结总
Dec 06 PHP
在PHP中使用反射技术的架构插件使用说明
May 18 PHP
php操作JSON格式数据的实现代码
Dec 24 PHP
使用Linux五年积累的一些经验技巧
Jun 20 PHP
php MessagePack介绍
Oct 06 PHP
PHP禁止个别IP访问网站
Oct 30 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
Oct 31 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
May 08 PHP
Linux操作系统安装LAMP环境
Jun 26 PHP
PHP开发制作一个简单的活动日程表Calendar
Jun 20 PHP
实现laravel 插入操作日志到数据库的方法
Oct 11 PHP
laravel 修改.htaccess文件 重定向public的解决方法
Oct 12 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实现将GB编码转换为UTF8
2006/11/25 PHP
php学习之数据类型之间的转换代码
2011/05/29 PHP
php数组函数序列之array_keys() - 获取数组键名
2011/10/30 PHP
Laravel实现用户注册和登录
2015/01/23 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
PHP基于单例模式编写PDO类的方法
2016/09/13 PHP
php+mysql实现简单登录注册修改密码网页
2016/11/30 PHP
jquery简单体验
2007/01/10 Javascript
JQuery 获取和设置Select选项的代码
2010/02/07 Javascript
获得所有表单值的JQuery实现代码[IE暂不支持]
2012/05/24 Javascript
artdialog的图片/标题以及关闭按钮不显示的解决方法
2013/06/27 Javascript
Nodejs sublime text 3安装与配置
2014/06/19 NodeJs
[将免费进行到底]在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客
2014/08/18 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
详解nodejs 文本操作模块-fs模块(五)
2016/12/23 NodeJs
bootstrap table 数据表格行内修改的实现代码
2017/02/13 Javascript
详解vue2路由vue-router配置(懒加载)
2017/04/08 Javascript
Angular5.1新功能分享
2017/12/21 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
2018/01/27 Javascript
小程序云开发之用户注册登录
2019/05/18 Javascript
Vuex实现简单购物车
2021/01/10 Vue.js
总结Python中逻辑运算符的使用
2015/05/13 Python
Python使用os模块和fileinput模块来操作文件目录
2016/01/19 Python
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
PyCharm代码格式调整方法
2018/05/23 Python
十分钟搞定pandas(入门教程)
2019/06/21 Python
torch 中各种图像格式转换的实现方法
2019/12/26 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
英国厨房与餐具用品为主的设计品牌:Joseph Joseph
2018/04/26 全球购物
香港最新科技与优质家居产品购物网站:J SELECT
2018/08/21 全球购物
英国第一摩托车和摩托车越野配件商店:GhostBikes
2019/03/10 全球购物
个人求职信范文分享
2014/01/31 职场文书
2014年大学生党课心得体会范文
2014/03/29 职场文书
中学图书馆工作总结
2015/08/11 职场文书
Python爬虫基础之爬虫的分类知识总结
2021/05/13 Python
SQL Server中T-SQL标识符介绍与无排序生成序号的方法
2022/05/25 SQL Server