PHP中数据库单例模式的实现代码分享


Posted in PHP onAugust 21, 2014

首先我们要知道明确单例模式这个概念,那么什么是单例模式呢?

单例模式顾名思义,就是只有一个实例。

作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类我们称之为单例类。

单例模式的要点有三个:

一是某个类只能有一个实例;
二是它必须自行创建这个实例;
三是它必须自行向整个系统提供这个实例。

下面我们讨论下为什么要使用PHP单例模式?

多数人都是从单例模式的字面上的意思来理解它的用途, 认为这是对系统资源的节省, 可以避免重复实例化, 是一种"计划生育". 而PHP每次执行完页面都是会从内存中清理掉所有的资源. 因而PHP中的单例实际每次运行都是需要重新实例化的, 这样就失去了单例重复实例化的意义了. 单单从这个方面来说, PHP的单例的确有点让各位失望. 但是单例仅仅只有这个功能和应用吗? 答案是否定的,我们一起来看看。

1. php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 在使用面向对象的方式开发时(废话), 如果使用单例模式, 则可以避免大量的new 操作消耗的资源。

2. 如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看zend Framework的FrontController部分。

3. 在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo。

class db {
  public static $cennct = null;
  private function __construct(){return false;}
  private function conn(){
    $pdo = new PDO('mysql:host=localhost;dbname=dbname','root','');
    $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);    
    $pdo->query('set names utf8');            
    return $pdo;                  
  }
  public static function getdb(){
    if(self::$cennct == null )
      self::$cennct = self::conn(); 
      return true;
  }
  protected function fetch($sql,$param=array()){
    $this->getdb();
    $tmp = self::$cennct->prepare($sql);
    $tmp->execute($param);
    return $tmp->fetch(PDO::FETCH_ASSOC);
  }
  protected function fetchAll($sql,$param=array()){
    $this->getdb();
    $tmp = self::$cennct->prepare($sql);
    $tmp->execute($param);
    return $tmp->fetchAll(PDO::FETCH_ASSOC);     
  }
  protected function execute($sql,$param=array()){
    $this->getdb(); 
    $tmp = self::$cennct->prepare($sql);
    return $tmp->execute($param);
  }
}

以上为一个数据库操作单例模式

PHP 相关文章推荐
用PHP创建PDF中文文档
Oct 09 PHP
全文搜索和替换
Oct 09 PHP
基于wordpress主题制作的具体实现步骤
May 10 PHP
php中$_POST与php://input的区别实例分析
Jan 07 PHP
php单文件版在线代码编辑器
Mar 12 PHP
php动态绑定变量的用法
Jun 16 PHP
php二维码生成
Oct 19 PHP
Thinkphp和onethink实现微信支付插件
Apr 13 PHP
PHP判断表达式中括号是否匹配的简单实例
Oct 22 PHP
PHP基于递归算法解决兔子生兔子问题
May 11 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
Jun 12 PHP
php扩展开发入门demo示例
Sep 23 PHP
PHP中的日期加减方法示例
Aug 21 #PHP
PHP中比较时间大小实例
Aug 21 #PHP
PHP中使用strpos函数实现屏蔽敏感关键字功能
Aug 21 #PHP
PHP中使用sleep函数实现定时任务实例分享
Aug 21 #PHP
PHP实现的多彩标签效果代码分享
Aug 21 #PHP
又一个PHP实现的冒泡排序算法分享
Aug 21 #PHP
PHP中几个可以提高运行效率的代码写法、技巧分享
Aug 21 #PHP
You might like
php另类上传图片的方法(PHP用Socket上传图片)
2013/10/30 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
php中常见的sql攻击正则表达式汇总
2014/11/06 PHP
php等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
jQuery 联动日历实现代码
2012/05/31 Javascript
js判断浏览器是否支持html5
2014/08/17 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
JS更改select内option属性的方法
2015/10/14 Javascript
EditPlus中的正则表达式 实战(2)
2016/12/15 Javascript
nodejs mysql 实现分页的方法
2017/06/06 NodeJs
详解Angular2响应式表单
2017/06/14 Javascript
JS组件系列之Gojs组件 前端图形化插件之利器
2017/11/29 Javascript
详解Bootstrap 学习(一)入门
2019/04/12 Javascript
中高级前端必须了解的JS中的内存管理(推荐)
2019/07/04 Javascript
ES6扩展运算符和rest运算符用法实例分析
2020/05/23 Javascript
vue element-ul实现展开和收起功能的实例代码
2020/11/25 Vue.js
python批量提取word内信息
2015/08/09 Python
Python科学计算之NumPy入门教程
2017/01/15 Python
python递归函数绘制分形树的方法
2018/06/22 Python
Python爬虫实现验证码登录代码实例
2019/05/10 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
Python操作Sqlite正确实现方法解析
2020/02/05 Python
Python 批量读取文件中指定字符的实现
2020/03/06 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
python3访问字典里的值实例方法
2020/11/18 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
2021/01/28 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
2021/02/16 Python
创业计划书六个要素
2013/12/26 职场文书
小学生检讨书大全
2014/02/06 职场文书
施工材料员岗位职责
2014/02/12 职场文书
优秀毕业生找工作自荐信
2014/06/23 职场文书
银行奉献演讲稿
2014/09/16 职场文书
四风问题个人对照检查剖析材料
2014/09/27 职场文书
合同纠纷调解书
2015/05/20 职场文书
带你彻底理解JavaScript中的原型对象
2021/04/14 Javascript
健身房被搭讪?用python写了个小米计时器助人为乐
2021/06/08 Python