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中取得image按钮传递的name值
Oct 09 PHP
PHP技术开发技巧分享
Mar 23 PHP
PHP下escape解码函数的实现方法
Aug 08 PHP
php 实现进制转换(二进制、八进制、十六进制)互相转换实现代码
Oct 22 PHP
php中最简单的字符串匹配算法
Dec 16 PHP
PHP Static延迟静态绑定用法分析
Mar 16 PHP
php array_merge_recursive 数组合并
Oct 26 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
Apr 19 PHP
PHP根据key删除数组中指定的元素
Feb 28 PHP
PHP使用phpunit进行单元测试示例
Sep 23 PHP
TP5框架页面跳转样式操作示例
Apr 05 PHP
PHP代码覆盖率统计详解
Jul 22 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 写文本日志实现代码
2010/05/18 PHP
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
php中将数组存到文件里的实现代码
2012/01/19 PHP
php计算两个文件相对路径的方法
2015/03/14 PHP
php通过pecl方式安装扩展的实例讲解
2018/02/02 PHP
JTrackBar水平拖动效果
2007/07/15 Javascript
javascript下给元素添加事件的方法与代码
2007/08/13 Javascript
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
JSON 入门指南 想了解json的朋友可以看下
2009/08/26 Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
2011/09/20 Javascript
js冒泡、捕获事件及阻止冒泡方法详细总结
2014/05/08 Javascript
Javascript实现图片加载从模糊到清晰显示的方法
2016/06/21 Javascript
jquery中用jsonp实现搜索框功能
2016/10/18 Javascript
Bootstrap BootstrapDialog使用详解
2017/02/17 Javascript
jquery实现图片轮播器
2017/05/23 jQuery
JavaScript变量类型以及变量作用域详解
2017/08/14 Javascript
layer子层给父层页面元素赋值,以达到向父层页面传值的效果实例
2017/09/22 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
javascript中可能用得到的全部的排序算法
2020/03/05 Javascript
JavaScript中遍历的十种方法总结
2020/12/15 Javascript
Python通过正则表达式选取callback的方法
2015/07/18 Python
python通过socket查询whois的方法
2015/07/18 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
pytorch 常用线性函数详解
2020/01/15 Python
法国体育用品商店:GO Sport
2019/10/23 全球购物
精通CAD能手自荐书
2014/01/31 职场文书
简单租房协议书
2014/04/09 职场文书
交警正风肃纪剖析材料
2014/10/29 职场文书
广告业务员岗位职责
2015/02/13 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
《桂花雨》教学反思
2016/02/19 职场文书
编写python程序的90条建议
2021/04/14 Python
windows安装python超详细图文教程
2021/05/21 Python
Python爬虫入门案例之回车桌面壁纸网美女图片采集
2021/10/16 Python
python的netCDF4批量处理NC格式文件的操作方法
2022/03/21 Python