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 相关文章推荐
文件上传的实现
Oct 09 PHP
php后台多用户权限组思路与实现程序代码分享
Feb 13 PHP
Yii PHP Framework实用入门教程(详细介绍)
Jun 18 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
Aug 28 PHP
php使用Jpgraph绘制饼状图的方法
Jun 10 PHP
100行PHP代码实现socks5代理服务器
Apr 28 PHP
PHP 搜索查询功能实现
Nov 29 PHP
php技巧小结【推荐】
Jan 19 PHP
thinkPHP框架实现图像裁剪、缩放、加水印的方法
Mar 14 PHP
CodeIgniter框架基本增删改查操作示例
Mar 23 PHP
Laravel 的数据库迁移的方法
Jul 31 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 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
XAMPP安装与使用方法详细解析
2013/11/27 PHP
PHP用星号隐藏部份用户名、身份证、IP、手机号等实例
2014/04/08 PHP
jquery+php+ajax显示上传进度的多图片上传并生成缩略图代码
2014/10/15 PHP
php抽象类用法实例分析
2015/07/07 PHP
PHP图片加水印实现方法
2016/05/06 PHP
详解Yii2 定制表单输入字段的标签和样式
2017/01/04 PHP
javascript 硬盘序列号+其它硬件信息
2008/12/23 Javascript
Javascript typeof 用法
2008/12/28 Javascript
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
js实现的点击div区域外隐藏div区域
2014/06/30 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
react-router v4如何使用history控制路由跳转详解
2018/01/09 Javascript
javascript动态创建对象的属性详解
2018/11/07 Javascript
基于vue-cli3创建libs库的实现方法
2019/12/04 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS OG
2018/03/30 DOTA
Python入门学习指南分享
2018/04/11 Python
python字符串与url编码的转换实例
2018/05/10 Python
Python常见字典内建函数用法示例
2018/05/14 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
python使用socket 先读取长度,在读取报文内容示例
2019/09/26 Python
python和php哪个更适合写爬虫
2020/06/22 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
HTML5使用Audio标签实现歌词同步的效果
2016/03/17 HTML / CSS
手工制作的意大利皮革运动鞋:KOIO
2020/01/05 全球购物
澳大利亚著名的纺织品品牌:Canningvale
2020/05/05 全球购物
干部下基层实施方案
2014/03/14 职场文书
中考标语大全
2014/06/05 职场文书
校本教研活动总结
2014/07/01 职场文书
工作经历证明书范文
2014/11/02 职场文书
大学生助学金感谢信
2015/01/21 职场文书
幼师个人总结范文
2015/02/28 职场文书
2015年行政管理人员工作总结
2015/10/15 职场文书
Python Numpy之linspace用法说明
2021/04/17 Python