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 相关文章推荐
php4的session功能评述(二)
Oct 09 PHP
PHP循环获取GET和POST值的代码
Apr 09 PHP
兼容PHP5的PHP目录管理函数库
Jul 10 PHP
php 求质素(素数) 的实现代码
Apr 12 PHP
php设计模式 Decorator(装饰模式)
Jun 26 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
Jun 13 PHP
session 加入redis的实现代码
Jul 15 PHP
php中的单引号、双引号和转义字符详解
Feb 16 PHP
PHP实现随机生成水印图片功能
Mar 22 PHP
利用PHPExcel实现Excel文件的写入和读取
Apr 26 PHP
PHP实现的解汉诺塔问题算法示例
Aug 06 PHP
tp5.1 框架join方法用法实例分析
May 26 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 中执行系统外部命令
2006/10/09 PHP
最令PHP初学者们头痛的十四个问题
2007/01/15 PHP
用PHP的ob_start() 控制您的浏览器cache
2009/08/03 PHP
PHP正则表达式之定界符和原子介绍
2012/10/05 PHP
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
php操作(删除,提取,增加)zip文件方法详解
2015/03/12 PHP
详解PHP队列的实现
2019/03/14 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
PHP使用递归按层级查找数据的方法
2019/11/10 PHP
jQuery EasyUi实战教程之布局篇
2016/01/26 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
Bootstrap基本组件学习笔记之导航(10)
2016/12/07 Javascript
JS实现可针对算术表达式求值的计算器功能示例
2018/09/04 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
2018/11/25 Javascript
原生js+css调节音量滑块
2020/01/15 Javascript
使用Python实现一个简单的项目监控
2015/03/31 Python
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
Python扩展内置类型详解
2018/03/26 Python
树莓派使用USB摄像头和motion实现监控
2019/06/22 Python
浅谈pycharm使用及设置方法
2019/09/09 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
2020/04/21 Python
PyCharm vs VSCode,作为python开发者,你更倾向哪种IDE呢?
2020/08/17 Python
Python环境搭建过程从安装到Hello World
2021/02/05 Python
购买限量版收藏品、珠宝和礼品:Bradford Exchange
2016/09/23 全球购物
美国体育用品商店:Paragon Sports
2017/10/08 全球购物
四种会话跟踪技术
2015/05/20 面试题
中介公司区域经理岗位职责范本
2014/03/02 职场文书
《画风》教学反思
2014/04/16 职场文书
《望庐山瀑布》教学反思
2014/04/22 职场文书
元旦联欢会策划方案
2014/06/11 职场文书
2014报到证办理个人委托书
2014/10/08 职场文书
学校政风行风自查自纠报告
2014/10/21 职场文书
企业与个人合作经营协议书
2014/11/01 职场文书
2014年幼儿园老师工作总结
2014/12/05 职场文书
2015年清明节网上祭英烈留言寄语
2015/03/04 职场文书