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+MySQL的聊天室设计
Oct 09 PHP
PHP脚本数据库功能详解(中)
Oct 09 PHP
php 404错误页面实现代码
Jun 22 PHP
PHP编程过程中需要了解的this,self,parent的区别
Dec 30 PHP
php 数据库字段复用的基本原理与示例
Jul 22 PHP
php模拟socket一次连接,多次发送数据的实现代码
Jul 26 PHP
thinkphp配置连接数据库技巧
Dec 02 PHP
PHP弹出对话框技巧详细解读
Sep 26 PHP
CodeIgniter读写分离实现方法详解
Jan 20 PHP
PHP读书笔记整理_结构语句详解
Jul 01 PHP
php网页版聊天软件实现代码
Aug 12 PHP
Laravel 模型关联基础教程详解
Sep 17 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
phpMyAdmin2.11.6安装配置方法
2008/08/24 PHP
基于Zookeeper的使用详解
2013/05/02 PHP
解析PHP留言本模块主要功能的函数说明(代码可实现)
2013/06/25 PHP
php 使用array函数实现分页
2015/02/13 PHP
php文件上传你必须知道的几点
2015/10/20 PHP
PHP实现无限级分类(不使用递归)
2015/10/22 PHP
PHP保存session到memcache服务器的方法
2016/01/19 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
2016/11/16 PHP
jquery的总体架构分析及实现示例详解
2014/11/08 Javascript
基于JavaScript实现全屏透明遮罩div层锁屏效果
2016/01/26 Javascript
javascript特效实现——当前时间和倒计时效果的简单实例
2016/07/20 Javascript
理解 JavaScript EventEmitter
2018/03/29 Javascript
react配合antd组件实现的管理系统示例代码
2018/04/24 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
js jquery 获取某一元素到浏览器顶端的距离实现方法
2018/09/05 jQuery
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
Python多进程通信Queue、Pipe、Value、Array实例
2014/11/21 Python
Python中使用partial改变方法默认参数实例
2015/04/28 Python
python中urllib.unquote乱码的原因与解决方法
2017/04/24 Python
python实现机械分词之逆向最大匹配算法代码示例
2017/12/13 Python
python 执行shell命令并将结果保存的实例
2018/05/11 Python
python版opencv摄像头人脸实时检测方法
2018/08/03 Python
python设置环境变量的原因和方法
2019/06/24 Python
PyCharm 2019.3发布增加了新功能一览
2019/12/08 Python
thinkphp5 路由分发原理
2021/03/18 PHP
size?德国官方网站:英国伦敦的球鞋精品店
2018/03/17 全球购物
Lookfantastic希腊官网:英国知名美妆购物网站
2018/09/15 全球购物
什么叫应用程序域?什么是受管制的代码?什么是强类型系统?什么是装箱和拆箱?
2016/08/13 面试题
岗位安全生产责任书
2014/07/28 职场文书
2015年少先队活动总结
2015/03/25 职场文书
高一军训感想
2015/08/07 职场文书
关于办理居住证的介绍信模板
2019/11/27 职场文书
MySQL中几种插入和批量语句实例详解
2021/09/14 MySQL
Vue自定义铃声提示音组件的实现
2022/01/22 Vue.js