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树的代码,可以嵌套任意层
Oct 09 PHP
PHP执行linux系统命令的常用函数使用说明
Apr 27 PHP
PHP+Mysql+jQuery实现动态展示信息
Oct 08 PHP
php删除页面记录 同时刷新页面 删除条件用GET方式获得
Jan 10 PHP
浅析application/x-www-form-urlencoded和multipart/form-data的区别
Jun 22 PHP
PHP页面实现定时跳转的方法
Oct 31 PHP
PHP使用内置函数生成图片的方法详解
May 09 PHP
php实现贪吃蛇小游戏
Jul 26 PHP
PHP基于curl后台远程登录正方教务系统的方法
Oct 14 PHP
centos+php+coreseek+sphinx+mysql之一coreseek安装篇
Oct 25 PHP
Joomla框架实现字符串截取的方法示例
Jul 18 PHP
PHP实现的redis主从数据库状态检测功能示例
Jul 20 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注释和去除空格函数分享
2014/03/13 PHP
PHP 获取 ping 时间的实现方法
2017/09/29 PHP
PHP让网站移动访问更加友好方法
2019/02/14 PHP
在js中使用&quot;with&quot;语句中跨frame的变量引用问题
2007/03/08 Javascript
javascript 同时在IE和FireFox获取KeyCode的代码
2010/02/07 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
关于window.pageYOffset和document.documentElement.scrollTop
2011/04/05 Javascript
博客侧边栏模块跟随滚动条滑动固定效果的实现方法(js+jquery等)
2013/03/24 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
JS组件Bootstrap实现弹出框效果代码
2016/04/26 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
2016/11/01 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
2017/09/11 Javascript
Servlet3.0与纯javascript通过Ajax交互的实例详解
2018/03/18 Javascript
JavaScript创建、读取和删除cookie
2019/09/03 Javascript
layui 弹出删除确认界面的实例
2019/09/06 Javascript
layui实现二维码弹窗、并下载到本地的方法
2019/09/25 Javascript
JS中准确判断变量类型的方法
2020/06/01 Javascript
JavaScript中常用的3种弹出提示框(alert、confirm、prompt)
2020/11/10 Javascript
vue实现拖拽进度条
2021/03/01 Vue.js
python为tornado添加recaptcha验证码功能
2014/02/26 Python
Python中下划线的使用方法
2015/03/27 Python
python 中的int()函数怎么用
2017/10/17 Python
基于python实现简单日历
2018/07/28 Python
对Python中class和instance以及self的用法详解
2019/06/26 Python
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
香港万宁官方海外旗舰店:香港健与美连锁店
2018/09/27 全球购物
家属答谢词
2015/01/05 职场文书
写给女朋友的保证书
2015/05/09 职场文书
2015年小学校长工作总结
2015/05/19 职场文书
工作证明书
2015/06/15 职场文书
高中班主任工作总结(范文)
2019/08/20 职场文书
SpringBoot集成Redis的思路详解
2021/10/16 Redis
代码复现python目标检测yolo3详解预测
2022/05/06 Python
vue/cli 配置动态代理无需重启服务的方法
2022/05/20 Vue.js