PHP设计模式之单例模式原理与实现方法分析


Posted in PHP onApril 25, 2018

本文实例讲述了PHP设计模式之单例模式原理与实现方法。分享给大家供大家参考,具体如下:

一、什么是单例模式

作为对象的创建模式,单例模式确保某一个类只有一个实例,并且对外提供这个全局实例的访问入口。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。

二、PHP单例模式三要素

1. 需要一个保存类的唯一实例的静态成员变量。

2. 构造函数和克隆函数必须声明为私有的,防止外部程序创建或复制实例副本。

3. 必须提供一个访问这个实例的公共静态方法,从而返回唯一实例的一个引用。

三、为什么使用单例模式

使用单例模式的好处很大,以数据库操作为例。若不采用单例模式,当程序中出现大量数据库操作时,每次都要执行new操作,每次都会消耗大量的内存资源和系统资源,而且每次打开和关闭数据库连接都是对数据库的一种极大考验和浪费。使用了单例模式,只需要实例化一次,不需要每次都执行new操作,极大降低了资源的耗费。

四、单例模式示例

这里以数据库操作为例

<?php
/**
*  单例模式
**/
class Db
{
  //保存全局实例
  private static $instance;
  //数据库连接句柄
  private $db;
  //数据库连接参数
  const HOSTNAME = "127.0.0.1";
  const USERNAME = "root";
  const PASSWORD = "root";
  const DBNAME = "testdb";
  //私有化构造函数,防止外界实例化对象
  private function __construct()
  {
    $this->db = mysqli_connect(self::HOSTNAME,self::USERNAME,
      self::PASSWORD,self::DBNAME);
  }
  //私有化克隆函数,防止外界克隆对象
  private function __clone()
  {
  }
  //单例访问统一入口
  public static function getInstance()
  {
    if(!(self::$instance instanceof self))
    {
      self::$instance = new self();
    }
    return self::$instance;
  }
  //数据库查询操作
  public function getinfo()
  {
    $sql = "select * from testtb";
    $res = mysqli_query($this->db,$sql);
    while($row = mysqli_fetch_array($res)) {
      echo $row['testcol'] . '<br />';
    }
    mysqli_free_result($res);
  }
}
$mysqli = Db::getInstance();
$mysqli->getinfo();
?>

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP strncasecmp字符串比较的小技巧
Jan 04 PHP
PHP生成指定长度随机数最简洁的方法
Jul 14 PHP
php实现微信公众平台账号自定义菜单类
Dec 02 PHP
php读取flash文件高宽帧数背景颜色的方法
Jan 06 PHP
部署PHP时的4个配置修改说明
Oct 19 PHP
php使用ffmpeg向视频中添加文字字幕的实现方法
May 23 PHP
Laravel4中的Validator验证扩展用法详解
Jul 26 PHP
php注册和登录界面的实现案例(推荐)
Oct 24 PHP
PHP那些琐碎的知识点(整理)
May 20 PHP
php微信公众号开发之校园图书馆
Oct 20 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
Aug 05 PHP
Laravel框架下载,安装及路由操作图文详解
Dec 04 PHP
PHP设计模式之工厂方法设计模式实例分析
Apr 25 #PHP
原生php实现excel文件读写的方法分析
Apr 25 #PHP
PHP操作Redis常用技巧总结
Apr 24 #PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
Apr 24 #PHP
PHP操作Postgresql封装类与应用完整实例
Apr 24 #PHP
php接口实现拖拽排序功能
Apr 23 #PHP
PHP基于SPL实现的迭代器模式示例
Apr 22 #PHP
You might like
php下的权限算法的实现
2007/04/28 PHP
详解PHP中的PDO类
2015/07/06 PHP
PHP发送短信代码分享
2015/08/11 PHP
PHP运行模式汇总
2016/11/06 PHP
PHP分页显示的方法分析【附PHP通用分页类】
2018/05/10 PHP
javascript 运算数的求值顺序
2011/08/23 Javascript
js写的评论分页(还不错)
2013/12/23 Javascript
kindeditor修复会替换script内容的问题
2015/04/03 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
2016/01/12 Javascript
JavaScript自学笔记(必看篇)
2016/06/23 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
easyui datagrid 大数据加载效率慢,优化解决方法(推荐)
2016/11/09 Javascript
前端跨域的几种解决方式总结(推荐)
2017/08/16 Javascript
JS中call和apply函数用法实例分析
2018/06/20 Javascript
[37:03]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第二场 12.16
2020/12/18 DOTA
Python实现对字符串的加密解密方法示例
2017/04/29 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
python pygame实现2048游戏
2018/11/20 Python
pandas数据处理进阶详解
2019/10/11 Python
Python多进程编程常用方法解析
2020/03/26 Python
Python numpy矩阵处理运算工具用法汇总
2020/07/13 Python
python 匿名函数与三元运算学习笔记
2020/10/23 Python
Otiumberg官网:英国半精致珠宝品牌
2021/01/16 全球购物
广告学专业毕业生自荐信
2013/09/24 职场文书
开业庆典策划方案
2014/02/18 职场文书
博士毕业生自我鉴定范文
2014/04/13 职场文书
《云房子》教学反思
2014/04/20 职场文书
节约用水演讲稿
2014/05/21 职场文书
教师师德考核自我评价
2014/09/13 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
写给领导的感谢信
2015/01/22 职场文书
装配车间主任岗位职责
2015/04/08 职场文书
生日宴会祝酒词
2015/08/10 职场文书
旷工检讨书大全
2015/08/15 职场文书
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python
如何避免mysql启动时错误及sock文件作用分析
2022/01/22 MySQL