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书写安全的脚本代码
Feb 05 PHP
PHP中集成PayPal标准支付的实现方法分享
Feb 06 PHP
php实现MD5加密16位(不要默认的32位)
Aug 12 PHP
使用gd库实现php服务端图片裁剪和生成缩略图功能分享
Dec 25 PHP
PHP程序漏洞产生的原因分析与防范方法说明
Mar 06 PHP
php使用正则表达式进行字符串搜索的方法
Mar 23 PHP
PHP实现HTML页面静态化的方法
Nov 04 PHP
php原生导出excel文件的两种方法(推荐)
Nov 19 PHP
php使用preg_match()函数验证ip地址的方法
Jan 07 PHP
老生常谈PHP 文件写入和读取(必看篇)
May 22 PHP
PHP对称加密算法(DES/AES)类的实现代码
Nov 14 PHP
php5对象复制、clone、浅复制与深复制实例详解
Aug 14 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垃圾回收机制引用计数器概念分析
2013/06/24 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
php实现建立多层级目录的方法
2014/07/19 PHP
PHP消息队列用法实例分析
2016/02/12 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
javascript完美拖拽的实现方法
2013/09/29 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
2013/10/24 Javascript
javascript的渐进增强与平稳退化浅谈
2013/11/12 Javascript
基于NodeJS的前后端分离的思考与实践(一)全栈式开发
2014/09/26 NodeJs
Python脚本后台运行的几种方式
2015/03/09 Javascript
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
2015/12/08 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
jquery实现文本框textarea自适应高度
2016/03/09 Javascript
浅谈JS中的反柯里化( uncurrying)
2017/08/17 Javascript
JS实现的数组去除重复数据算法小结
2017/11/17 Javascript
vue实现word,pdf文件的导出功能
2018/07/31 Javascript
Vue中的v-for循环key属性注意事项小结
2018/08/12 Javascript
es6中Promise 对象基本功能与用法实例分析
2020/02/23 Javascript
[01:09]DOTA2次级职业联赛 - 99战队宣传片
2014/12/01 DOTA
Python 实现王者荣耀中的敏感词过滤示例
2019/01/21 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
详解Python Opencv和PIL读取图像文件的差别
2019/12/27 Python
Django中Q查询及Q()对象 F查询及F()对象用法
2020/07/09 Python
Python django框架 web端视频加密的实例详解
2020/11/20 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
css3使网页、图片变成灰色兼容大多数浏览器
2014/07/02 HTML / CSS
css和css3弹性盒模型实现元素宽度(高度)自适应
2019/05/15 HTML / CSS
汉森批发:Hansen Wholesale
2018/05/24 全球购物
Jacadi Paris英国官网:法国童装品牌
2019/08/09 全球购物
static关键字的用法
2013/10/07 面试题
经理助理岗位职责
2014/03/05 职场文书
安全生产工作汇报
2014/10/28 职场文书
JavaScript实现简单拖拽效果
2021/09/15 Javascript
Python利用Turtle绘制哆啦A梦和小猪佩奇
2022/04/04 Python
React如何使用axios请求数据并把数据渲染到组件
2022/08/05 Javascript