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面向对象全攻略 (三)特殊的引用“$this”的使用
Sep 30 PHP
PHP中如何定义和使用常量
Feb 28 PHP
PHP mysql与mysqli事务使用说明 分享
Aug 17 PHP
PHP mail()函数使用及配置方法
Jan 14 PHP
codeigniter中测试通过的分页类示例
Apr 17 PHP
PHP中对各种加密算法、Hash算法的速度测试对比代码
Jul 08 PHP
php获取数组元素中头一个数组元素值的实现方法
Dec 20 PHP
Thinkphp中的curd应用实用要点
Jan 04 PHP
PHP编写的图片验证码类文件分享
Jun 06 PHP
PHP单例模式与工厂模式详解
Aug 29 PHP
PHP工厂模式简单实现方法示例
May 23 PHP
Smarty模板变量与调节器实例详解
Jul 20 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自定义函数返回多个值
2006/11/26 PHP
QQ互联一键登录审核不通过的解决方案
2014/09/10 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
2014/12/18 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
thinkPHP5.0框架应用请求生命周期分析
2017/03/25 PHP
PHP自动生成缩略图函数的源码示例
2019/03/18 PHP
微信JSSDK分享功能图文实例详解
2019/04/08 PHP
php+ajax实现商品对比功能示例
2019/04/13 PHP
php异常处理捕获错误整理
2019/09/23 PHP
jQuery DOM操作实例
2014/03/05 Javascript
JQuery 控制内容长度超出规定长度显示省略号
2014/05/23 Javascript
js+css实现超简洁的二级下拉菜单效果代码
2015/09/07 Javascript
jQuery实现简单下拉导航效果
2015/09/07 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
Vue应用部署到服务器的正确方式
2017/07/15 Javascript
vue-cli 如何打包上线的方法示例
2018/05/08 Javascript
详解webpack模块加载器兼打包工具
2018/09/11 Javascript
javascript中this的用法实践分析
2019/07/29 Javascript
在Vue 中获取下拉框的文本及选项值操作
2020/08/13 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
python批量提取word内信息
2015/08/09 Python
Python 实现简单的电话本功能
2015/08/09 Python
Python基于列表模拟堆栈和队列功能示例
2018/01/05 Python
浅谈Django的缓存机制
2018/08/23 Python
Python如何应用cx_Oracle获取oracle中的clob字段问题
2019/08/27 Python
Python如何使用argparse模块处理命令行参数
2019/12/11 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
盖尔斯工厂店:GUESS Factory
2020/01/21 全球购物
大学生农村教师实习自我鉴定
2013/09/21 职场文书
中专毕业生自我鉴定
2014/02/02 职场文书
工程安全员岗位职责
2014/03/09 职场文书
企业年会主持词
2014/03/27 职场文书
毕业证代领委托书
2014/09/26 职场文书
实习单位指导教师评语
2014/12/30 职场文书
美容院员工规章制度
2015/08/05 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书