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入门的学习方法
Jan 02 PHP
php入门学习知识点七 PHP函数的基本应用
Jul 14 PHP
使用PHP求两个文件的相对路径
Jun 20 PHP
destoon二次开发入门示例
Jun 20 PHP
php利用反射实现插件机制的方法
Mar 14 PHP
php基于双向循环队列实现历史记录的前进后退等功能
Aug 08 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
Nov 27 PHP
php禁用cookie后session设置方法分析
Oct 19 PHP
PHP实现的简单在线计算器功能示例
Aug 02 PHP
PHP实现求两个字符串最长公共子串的方法示例
Nov 17 PHP
PHP程序守护进程化实现方法详解
Jul 16 PHP
PHP7 参数处理机制修改
Mar 09 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实现的太平洋时间和北京时间互转的自定义函数分享
2014/08/19 PHP
PHP对象递归引用造成内存泄漏分析
2014/08/28 PHP
Zend Framework实现将session存储在memcache中的方法
2016/03/22 PHP
PHP实现微信对账单处理
2018/10/01 PHP
激活 ActiveX 控件
2006/10/09 Javascript
项目实践之javascript技巧
2007/12/06 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
Vue.js快速入门教程
2016/09/07 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/10/05 Javascript
jQuery通过改变input的type属性实现密码显示隐藏切换功能
2017/02/08 Javascript
原生JS控制多个滚动条同步跟随滚动效果
2017/12/22 Javascript
node.js中路由,中间件,ge请求和post请求的参数详解
2017/12/26 Javascript
Vue 组件(component)教程之实现精美的日历方法示例
2018/01/08 Javascript
让你5分钟掌握9个JavaScript小技巧
2018/06/09 Javascript
Python使用type关键字创建类步骤详解
2019/07/23 Python
在Python中使用MySQL--PyMySQL的基本使用方法
2019/11/19 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
基于python实现地址和经纬度转换
2020/05/19 Python
解决numpy矩阵相减出现的负值自动转正值的问题
2020/06/03 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
html5播放视频且动态截图实现步骤与代码(支持safari其他未测试)
2013/01/06 HTML / CSS
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
Brookstone美国官网:独特新奇产品
2017/03/04 全球购物
this关键字的作用
2016/01/30 面试题
学校介绍信范文
2014/01/14 职场文书
2014年幼儿园元旦活动方案
2014/02/13 职场文书
优秀经理获奖感言
2014/03/04 职场文书
企业安全生产标语
2014/06/06 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
党性观念心得体会
2014/09/03 职场文书
教师反腐倡廉演讲稿
2014/09/03 职场文书
2015年后勤工作总结范文
2015/04/08 职场文书
销售合作意向书范本
2015/05/08 职场文书
vue实现可拖拽的dialog弹框
2021/05/13 Vue.js
前端与RabbitMQ实时消息推送未读消息小红点实现示例
2022/07/23 Java/Android
css清除浮动clearfix:after的用法详解(附完整代码)
2023/05/21 HTML / CSS