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 相关文章推荐
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
Jan 15 PHP
php正则过滤html标签、空格、换行符的代码(附说明)
Oct 25 PHP
php下批量挂马和批量清马代码
Feb 27 PHP
php更新修改excel中的内容实例代码
Feb 26 PHP
php获取随机数组列表的方法
Nov 13 PHP
PHP调试函数和日志记录函数分享
Jan 31 PHP
php返回相对时间(如:20分钟前,3天前)的方法
Apr 14 PHP
php通过分类列表产生分类树数组的方法
Apr 20 PHP
PHP抓取及分析网页的方法详解
Apr 26 PHP
php similar_text()函数的定义和用法
May 12 PHP
支付宝服务窗API接口开发php版本
Jul 20 PHP
详谈php静态方法及普通方法的区别
Oct 04 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实现Socket服务器的代码
2008/04/03 PHP
PHP更新购物车数量(表单部分/PHP处理部分)
2013/05/03 PHP
Linux下php5.4启动脚本
2014/08/03 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
php爬取天猫和淘宝商品数据
2018/02/23 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
2019/05/27 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
解决FireFox下[使用event很麻烦]的问题
2006/11/26 Javascript
一个简单的js动画效果代码
2010/07/20 Javascript
解析JavaScript中delete操作符不能删除的对象
2013/12/03 Javascript
javascript中match函数的用法小结
2014/02/08 Javascript
js判断undefined类型示例代码
2014/02/10 Javascript
js控制当再次点击按钮时的间隔时间
2014/06/03 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
AngularJS模块详解及示例代码
2016/08/17 Javascript
Angular实现购物车计算示例代码
2017/02/21 Javascript
LayUI表格批量删除方法
2018/08/15 Javascript
jQuery事件blur()方法的使用实例讲解
2019/03/30 jQuery
小程序中this.setData的使用和注意事项
2019/08/28 Javascript
Vue登录主页动态背景短视频制作
2019/09/21 Javascript
vue-next/runtime-core 源码阅读指南详解
2019/10/25 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
jQuery冲突问题解决方法
2021/01/19 jQuery
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
python采用getopt解析命令行输入参数实例
2014/09/30 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
Python  word实现读取及导出代码解析
2020/07/09 Python
使用CSS3创建动态菜单效果
2015/07/10 HTML / CSS
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
德国汽车零件和汽车配件网上商店:kfzteile24
2018/11/14 全球购物
Stutterheim瑞典:瑞典高级外套时装品牌
2019/06/24 全球购物
安全生产先进个人总结
2015/02/15 职场文书
英语演讲开场白
2015/05/29 职场文书
mysql拆分字符串作为查询条件的示例代码
2022/07/07 MySQL