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 相关文章推荐
一次编写,随处运行
Oct 09 PHP
php阻止页面后退的方法分享
Feb 17 PHP
php中动态调用函数的方法
Mar 16 PHP
php可扩展的验证类实例(可对邮件、手机号、URL等验证)
Jul 09 PHP
浅谈COOKIE和SESSION区别
Jul 19 PHP
php如何连接sql server
Oct 16 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
Dec 16 PHP
php通过执行CutyCapt命令实现网页截图的方法
Sep 30 PHP
thinkPHP5.0框架API优化后的友好性分析
Mar 17 PHP
PHP实现时间比较和时间差计算的方法示例
Jul 24 PHP
PHP中如何使用Redis接管文件存储Session详解
Nov 28 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
Mar 06 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
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
PHP foreach循环使用详解与实例代码
2010/05/08 PHP
通达OA公共代码 php常用检测函数
2011/12/14 PHP
PHP的switch判断语句的“高级”用法详解
2014/10/01 PHP
php调用KyotoTycoon简单实例
2015/04/02 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
Smarty模板引擎缓存机制详解
2016/05/23 PHP
(推荐一个超好的JS函数库)S.Sams Lifexperience ScriptClassLib
2007/04/29 Javascript
购物车选中得到价格实现示例
2014/01/26 Javascript
javascript中setTimeout的问题解决方法
2014/05/08 Javascript
jQuery实现返回顶部功能适合不支持js的浏览器
2014/08/19 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
js实现简洁大方的二级下拉菜单效果代码
2015/09/01 Javascript
论JavaScript模块化编程
2016/03/07 Javascript
微信小程序 form组件详解
2016/10/25 Javascript
Web前端框架bootstrap实战【第一次接触使用】
2016/12/28 Javascript
Bootstrap表单使用方法详解
2017/02/17 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
Angularjs渲染的 using 指令的星级评分系统示例
2017/11/09 Javascript
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
前端性能优化建议
2020/09/17 Javascript
Python3实现带附件的定时发送邮件功能
2020/12/22 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
2019/04/03 Python
用python写一个定时提醒程序的实现代码
2019/07/22 Python
Django Rest framework三种分页方式详解
2019/07/26 Python
30行Python代码实现高分辨率图像导航的方法
2020/05/22 Python
python模拟点击玩游戏的实例讲解
2020/11/26 Python
微软俄罗斯官方网站:Microsoft俄罗斯
2016/09/18 全球购物
ebookers英国:隶属全球最大的在线旅游公司Expedia
2017/12/28 全球购物
给交警的表扬信
2014/01/12 职场文书
行政助理工作职责范本
2014/03/04 职场文书
教师年终个人总结
2015/02/11 职场文书
食品质检员岗位职责
2015/04/08 职场文书
拾金不昧表扬稿大全
2015/05/05 职场文书
光荣之路观后感
2015/06/12 职场文书