PHP单例模式详解及实例代码


Posted in PHP onDecember 21, 2016

PHP单例模式详解

单例模式的概念

单例模式是指整个应用中某个类只有一个对象实例的设计模式。具体来说,作为对象的创建方式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局的提供这个实例。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。

单例模式的特点

单例模式的主要特点是“三私一公”:

需要一个保存类的唯一实例的私有静态成员变量

构造函数必须声明为私有的,防止外部程序new一个对象从而失去单例的意义

克隆函数必须声明为私有的,防止对象被克隆

必须提供一个访问这个实例的公共静态方法(通常命名为getInstance),从而返回唯一实例的一个引用。

使用单例模式的原因及场景

在PHP的大多数应用中都会存在大量的数据库操作,如果不用单例模式,那每次都要new操作,但是每次new都会消耗大量的系统资源和内存资源,而且每次打开和关闭数据库都是对数据库的一种极大考验和浪费。所以单例模式经常用在数据库操作类中。

同样,如果系统中需要有一个类来全局控制某些配置信息,那使用单例模式可以很方便的实现。

PHP单例模式实现

下面是一个PHP单例模式实现数据库操作类的框架

<?php
 class Db{
 const DB_HOST='localhost';
 const DB_NAME='';
 const DB_USER='';
 const DB_PWD='';
 private $_db;
 //保存实例的私有静态变量
 private static $_instance;
 //构造函数和克隆函数都声明为私有的
 private function __construct(){
 //$this->_db=mysql_connect();
 }
 private function __clone(){
 //实现
 }
 //访问实例的公共静态方法
 public static function getInstance(){
 if(!(self::$_instance instanceof self)){
 self::$_instance=new self();
 }
 //或者
 if(self::$_instance===null){
 self::$_instance=new Db();
 }
 return self::$_instance;
 }
 public function fetchAll(){
 //实现
 }
 public function fetchRow(){
 //实现
 }
 }
 //类外部获取实例的引用
 $db=Db::getInstance();
?>

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

PHP 相关文章推荐
php 无限级缓存的类的扩展
Mar 16 PHP
PHP取进制余数函数代码
Jan 19 PHP
PHP错误和异长常处理总结
Mar 06 PHP
PHP代码实现爬虫记录――超管用
Jul 31 PHP
求帮忙修改个php curl模拟post请求内容后并下载文件的解决思路
Sep 20 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
Oct 21 PHP
PHP实现linux命令tail -f
Feb 22 PHP
PHP面向对象程序设计之对象生成方法详解
Dec 02 PHP
PHP使用PDO抽象层获取查询结果的方法示例
May 10 PHP
Yii框架中使用PHPExcel的方法分析
Jul 25 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
Oct 24 PHP
用php实现分页效果的示例代码
Dec 10 PHP
PHP+Mysql无刷新问答评论系统(源码)
Dec 20 #PHP
PHP脚本自动识别验证码查询汽车违章
Dec 20 #PHP
php获取POST数据的三种方法实例详解
Dec 20 #PHP
Centos 6.5系统下编译安装PHP 7.0.13的方法
Dec 19 #PHP
Discuz论坛密码与密保加密规则
Dec 19 #PHP
yii框架搜索分页modle写法
Dec 19 #PHP
YII框架中搜索分页jQuery写法详解
Dec 19 #PHP
You might like
CodeIgniter配置之routes.php用法实例分析
2016/01/19 PHP
PHP的Yii框架中View视图的使用进阶
2016/03/29 PHP
php上传图片类及用法示例
2016/05/11 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
laravel入门知识点整理
2020/09/15 PHP
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
js动态添加删除,后台取数据(示例代码)
2013/11/25 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
2014/02/19 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
JS表格组件神器bootstrap table使用指南详解
2017/04/12 Javascript
详解用webpack把我们的业务模块分开打包的方法
2017/07/20 Javascript
js实现简单模态框实例
2018/11/16 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
详解Vue.js 响应接口
2020/07/04 Javascript
浅谈JS for循环中使用break和continue的区别
2020/07/21 Javascript
springboot+vue实现文件上传下载
2020/11/17 Vue.js
[02:10]三分钟回顾完美世界城市挑战赛
2019/01/24 DOTA
python中的reduce内建函数使用方法指南
2014/08/31 Python
python实现的AES双向对称加密解密与用法分析
2017/05/02 Python
浅谈python import引入不同路径下的模块
2017/07/11 Python
Scrapy框架CrawlSpiders的介绍以及使用详解
2017/11/29 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
Win10 安装PyCharm2019.1.1(图文教程)
2019/09/29 Python
Python列表原理与用法详解【创建、元素增加、删除、访问、计数、切片、遍历等】
2019/10/30 Python
python利用 keyboard 库记录键盘事件
2020/10/16 Python
Matplotlib animation模块实现动态图
2021/02/25 Python
css3实现针线缝合效果(图解步骤)
2013/02/04 HTML / CSS
使用phonegap播放音频的实现方法
2017/03/31 HTML / CSS
汽车电子与维修专业大学生求职信
2013/09/28 职场文书
库房保管员岗位职责
2014/04/07 职场文书
2015年销售工作总结范文
2015/03/30 职场文书
综治目标管理责任书
2015/05/11 职场文书
《索溪峪的野》教学反思
2016/02/19 职场文书
导游词书写之黄山
2019/08/06 职场文书
高考要来啦!用Python爬取历年高考数据并分析
2021/06/03 Python