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 相关文章推荐
apache+codeigniter 通过.htcaccess做动态二级域名解析
Jul 01 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
Jun 24 PHP
php中实现精确设置session过期时间的方法
Jul 17 PHP
php读取远程gzip压缩网页的方法
Dec 29 PHP
php实现计数器方法小结
Jan 05 PHP
php操作MongoDB类实例
Jun 17 PHP
php基于dom实现的图书xml格式数据示例
Feb 03 PHP
PHP 序列化和反序列化函数实例详解
Jul 18 PHP
php实现批量上传数据到数据库(.csv格式)的案例
Jun 18 PHP
PHP convert_uudecode()函数讲解
Feb 14 PHP
Thinkphp页面跳转设置跳转等待时间的操作
Oct 16 PHP
PHP实现页面静态化深入讲解
Mar 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
《APMServ 5.1.2》使用图解
2006/10/23 PHP
php Ubb代码编辑器函数代码
2012/07/05 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
学习jquery必备 api中英文对照的chm手册 下载
2007/05/03 Javascript
网站被黑的假象--ARP欺骗之页面中加入一段js
2007/05/16 Javascript
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
移动端jQuery修正Web页面滑动时div问题的两则实例
2016/05/30 Javascript
Nodejs--post的公式详解
2017/04/29 NodeJs
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
Angularjs按需查询实例代码
2017/10/30 Javascript
利用JS判断客户端类型你应该知道的四种方法
2017/12/22 Javascript
layer.open关闭父窗口 以及调用父页面的方法
2018/08/17 Javascript
浅谈redux以及react-redux简单实现
2018/08/28 Javascript
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
python实现在pickling的时候压缩的方法
2014/09/25 Python
python实现图片转字符小工具
2019/04/30 Python
使用Python串口实时显示数据并绘图的例子
2019/12/26 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
如何用Python 加密文件
2020/09/10 Python
python GUI计算器的实现
2020/10/09 Python
python 获取谷歌浏览器保存的密码
2021/01/06 Python
HTML5 在canvas中绘制文本附效果图
2014/06/23 HTML / CSS
Argos官网:英国家喻户晓的百货零售连锁商
2017/04/03 全球购物
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
医疗器械售后服务承诺书
2014/05/21 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
教导处教学工作总结
2015/08/12 职场文书
大学生干部培训心得体会
2016/01/06 职场文书
2019学生会干事辞职信
2019/06/27 职场文书
linux下导入、导出mysql数据库命令的实现方法
2021/05/26 MySQL
opencv读取视频并保存图像的方法
2021/06/04 Python
68行Python代码实现带难度升级的贪吃蛇
2022/01/18 Python