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 strtr() 函数使用说明
Nov 21 PHP
php session和cookie使用说明
Apr 07 PHP
PHP中echo和print的区别
Aug 28 PHP
PHP使用mysqldump命令导出数据库
Apr 14 PHP
php检查是否是ajax请求的方法
Apr 16 PHP
php生成PDF格式文件并且加密
Jun 22 PHP
win7安装php框架Yii的方法
Jan 25 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
Oct 13 PHP
Laravel框架文件上传功能实现方法示例
Apr 16 PHP
php实现根据身份证获取精准年龄
Feb 26 PHP
基于PHP实现用户登录注册功能的详细教程
Aug 04 PHP
PHP获取真实IP及IP模拟方法解析
Nov 24 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
攻克CakePHP系列二 表单数据显示
2008/10/22 PHP
一个简单php扩展介绍与开发教程
2010/08/19 PHP
WordPress中用于获取文章作者与分类信息的方法整理
2015/12/17 PHP
PHP简单实现循环链表功能示例
2017/11/10 PHP
php+redis实现商城秒杀功能
2020/11/19 PHP
php7函数,声明,返回值等新特性介绍
2018/05/25 PHP
关于laravel模板中生成URL的几种模式总结
2019/10/18 PHP
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
2013/09/29 Javascript
JS来动态的修改url实现对url的增删查改
2014/09/05 Javascript
javascript数组去重的方法汇总
2015/04/14 Javascript
原生js仿jquery animate动画效果
2016/07/13 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
2016/11/21 Javascript
微信小程序实战之自定义模态弹窗(8)
2017/04/18 Javascript
解决OneThink中无法异步提交kindeditor文本框中修改后的内容方法
2017/05/05 Javascript
Bootstrap fileinput文件上传组件使用详解
2017/06/06 Javascript
JavaScript文件的同步和异步加载的实现代码
2017/08/19 Javascript
vue.js动画中的js钩子函数的实现
2018/07/06 Javascript
Vue中的this.$options.data()和this.$data用法说明
2020/07/26 Javascript
python3简单实现微信爬虫
2015/04/09 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
python图像处理入门(一)
2019/04/04 Python
pytorch中如何使用DataLoader对数据集进行批处理的方法
2019/08/06 Python
利用Pytorch实现简单的线性回归算法
2020/01/15 Python
python GUI库图形界面开发之PyQt5单选按钮控件QRadioButton详细使用方法与实例
2020/02/28 Python
基于Canvas+Vue的弹幕组件的实现
2019/07/23 HTML / CSS
整理HTML5中表单的常用属性及新属性
2016/02/19 HTML / CSS
招聘与培训专员岗位职责
2014/01/30 职场文书
教室标语大全
2014/06/21 职场文书
寒暑假实习证明书模板
2014/11/29 职场文书
大班上学期个人总结
2015/02/13 职场文书
2015年宣传部个人工作总结
2015/05/14 职场文书
应届生们该怎么书写求职信?
2019/07/05 职场文书
nginx对http请求处理的各个阶段详析
2021/03/31 Servers
【js设计模式】SOLID五大设计原则
2022/03/24 Javascript