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 相关文章推荐
模拟flock实现文件锁定
Feb 14 PHP
不错的PHP学习之php4与php5之间会穿梭一点点感悟
May 03 PHP
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
Nov 10 PHP
PHP中数组定义的几种方法
Sep 01 PHP
PHP使用静态方法的几个注意事项
Sep 16 PHP
php查询mssql出现乱码的解决方法
Dec 29 PHP
PHP配置把错误日志以邮件方式发送方法(Windows系统)
Jun 23 PHP
php检查字符串中是否有外链的方法
Jul 29 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
Sep 09 PHP
在PHP中实现使用Guzzle执行POST和GET请求
Oct 15 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
Feb 10 PHP
PHP的垃圾回收机制代码实例讲解
Feb 27 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
优化使用mysql存储session的php代码
2008/01/10 PHP
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
PHP原理之异常机制深入分析
2010/08/08 PHP
php与java通过socket通信的实现代码
2013/10/21 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
PhpStorm连接服务器并实现自动上传功能
2020/12/09 PHP
javascript 面向对象思想 附源码
2009/07/07 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
2010/12/06 Javascript
js导出txt示例代码
2014/01/14 Javascript
javascript实现动态表头及表列的展现方法
2015/07/14 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
JavaScript数组去重的两种方法推荐
2016/04/05 Javascript
简单的js表格操作
2016/09/24 Javascript
AngularJS实现ajax请求的方法
2016/11/22 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
layer弹出子iframe层父子页面传值的实现方法
2018/11/22 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
如何利用node.js开发一个生成逐帧动画的小工具
2019/12/01 Javascript
[01:48]帕吉至宝加入游戏,遗迹战场现“千劫神屠”
2018/04/07 DOTA
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
Python编程之序列操作实例详解
2017/07/22 Python
Python批量生成幻影坦克图片实例代码
2019/06/04 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
Python matplotlib模块及柱状图用法解析
2020/08/10 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
静态成员和非静态成员的区别
2012/05/12 面试题
自我评价怎么写正确呢?
2013/12/02 职场文书
顶岗实习接收函
2014/01/09 职场文书
物流合作计划书
2014/01/10 职场文书
30年同学聚会感言
2014/01/30 职场文书
工作迟到检讨书范文
2015/05/06 职场文书
城镇居民医疗保险工作总结
2015/08/10 职场文书
使用Apache Camel表达REST服务的方法
2022/06/10 Servers
Nginx开源可视化配置工具NginxConfig使用教程
2022/06/21 Servers