PHP 单例模式实例与解析
一、什么是单例模式?
1、含义
作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。
2、单例模式的三个要点:
(1). 需要一个保存类的唯一实例的静态成员变量:
private static $_instance;
(2). 构造函数和克隆函数必须声明为私有的,防止外部程序new类从而失去单例模式的意义:
private function __construct(){$this->_db=pg_connect('xxoo');
}
private function clone(){}
(3). 必须提供一个访问这个实例的公共的静态方法(通常为getInstance方法),从而返回唯一实例的一个引用
public static function getInstance(){if(!(self::$_instance instanceof self)){self::$_instance=new self();}return self::$_instance;
}
二、为什么要使用单例模式?
1、PHP缺点:
php语言是一种解释型的脚本语言,这种运行机制使得每个PHP页面被解释执行后,所有的相关资源都会被回收。也就是说,PHP在语言级别上没有办法让某个对象常驻内存,这和asp.NET、Java等编译型是不同的,比如在Java中单例会一直存在于整个应用程序的生命周期里,变量是跨页面级的,真正可以做到这个实例在应用程序生命周期中的唯一性。然而在PHP中,所有的变量无论是全局变量还是类的静态成员,都是页面级的,每次页面被执行时,都会重新建立新的对象,都会在页面执行完毕后被清空,这样似乎PHP单例模式就没有什么意义了,所以PHP单例模式我觉得只是针对单次页面级请求时出现多个应用场景并需要共享同一对象资源时是非常有意义的。
2、单例模式在PHP中的应用场合:
(1)、应用程序与数据库交互
一个应用中会存在大量的数据库操作,比如过数据库句柄来连接数据库这一行为,使用单例模式可以避免大量的new操作,因为每一次new操作都会消耗内存资源和系统资源。
(2)、控制配置信息
如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现.
三、如何实现单例模式?
1、普通的数据库访问例子:
<?php
$db=new DB(...);//初始化一个数据库句柄
$db->addUserInfo(...);//添加用户信息//在函数中访问数据库,查找用户信息
function getUserInfo(){$db=new DB(...);//再次new 数据库类,和数据库建立连接$db=query(...);//根据查询语句访问数据库
}
2、应用单例模式对数据库进行操作:
<?php
class DB{private $_db;private static $_instance;private function __construct(){$this->_db=pg_connect(...);}private function clone(){}public static function getInstance(){if(!(self::$_instance instanceof self)){self::$_instance=new self();}return self::$_instance;}publilc function addUserInfo(){}public function getUserInfo(){}
}
$db=DB::getInstance();
$db->addUserInfo(...);
$db->getUserInfo(...);
PHP 单例模式实例与解析相关推荐
- jQuery Ajax 实例 全解析(转)
jQuery Ajax 实例 全解析 jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 废话少说,直接进入正题,我 ...
- android 滑动拦截,Android 滑动拦截实例代码解析
废话不多说了,直接给大家贴代码了,具体代码如下所示: package demo.hq.com.fby; import android.content.Context; import android.u ...
- 【教程】nrf51822实例代码解析及修改实例
[教程]nrf51822实例代码解析及修改实例 http://www.eeboard.com/bbs/thread-42757-1-1.html 说在前面:此说明用于nrf51822的主从机的实例代码 ...
- jQuery Ajax 实例 全解析(转载)
jQuery Ajax 实例 全解析 jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 废话少说,直接进入正题,我 ...
- java枚举类型原理_Java枚举类接口实例原理解析
这篇文章主要介绍了Java枚举类接口实例原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 枚举类可以实现一个或多个接口.与普通类实现接口完全一 ...
- vue重构html css,使用vue重构资讯页面的实例代码解析
从我接手到将这个页面代码重构前,一直都还是使用angular1的代码去做的,需求来了也是用angular去实现:作为一个憧憬新技术的前端,怎么忍受得了现在还在使用这么有历史感的框架,所以,以前就一直在 ...
- 用超多实例,解析「交互设计七大定律」在设计中的应用(上篇)
交互设计之父阿兰·库珀说过这样一句话:"除非有更好的选择,否则就遵从标准".在交互设计领域中,有很多被时间和前人验证过的设计法则,这些法则是从用户的行为逻辑中总结出来的,掌握这些法 ...
- 桥接模式实例与解析 实例一:模拟毛笔
桥接模式实例与解析 实例一:模拟毛笔 现需要提供大中小3种型号的画笔,能够绘制5种不同颜色,如果使用蜡笔,我们需要准备3*5=15支蜡笔,也就是说必须准备15个具体的蜡笔类.而 ...
- php 跑马灯抽奖,JavaScript实现跑马灯抽奖活动实例代码解析与优化(一)_javascript技巧...
最近做了个项目,其中有项目需求是要实现跑马灯抽奖效果,实现此功能主要用到js相关知识,废话不多说,感兴趣的朋友可以阅读下全文. 开始之前先来看上篇文章遗漏的两个问题和几个知识点,是自己重构的过程中需要 ...
最新文章
- JAR冲突问题的解决以及运行状态下如何查看加载的类
- DCMTK:OFOptional的单元测试
- gettimeofday函数
- layui登录页面写入数据_layui基本使用(动态获取数据,并把需要的数据传到新打开的窗口)...
- Cloud一分钟 |高通预在年底与苹果和解;比特币绝地反弹;广电拿下5G,或成第四大运营商...
- android 开源 高斯模糊_Android图像处理 - 高斯模糊的原理及实现
- 魅族16T官网开启预约:骁龙855+4400mAh大电池
- 将Access数据库导入到SQLite最简单最实用的方法 -转
- Http 四种请求访问代码 HttpGet HttpPost HttpPut HttpDelete
- [py]flask从0到1-模板/增删改查
- 人人开源项目搭建到服务器,四、人人开源搭建后台与前端 2020-06-16
- 如何使用PDF编辑软件给PDF删除页码
- wireshark出现rst的原因_多次RST以及不同场景下的RST报文的差异
- 什么是看板?了解如何构建看板,通过这些示例,让你快速实践
- Python基础知识练习(含答案)
- 201771010101 白玛次仁 《2018面向对象程序设计(Java)》第十七周学习总结
- 创维酷开系统14U系列8S26型号55寸智能电视实用玩机
- Cadence Allegro如何生成PCB截面图
- 【转载】我们究竟是如何测量珠峰的?
- 大学生为什么要写博客?意义?
热门文章
- puppeteer 鼠标定位滑块_puppeteer的使用
- CSDN蒋涛:我为什么和王峰一起创办极客帮天使基金?
- 【加密解密】对exe文件的加密解密 含源代码》
- 9基于linux百万级高并发框架Skynet-王桂林-专题视频课程
- php5.6版本帝国cms后台内容不显示,帝国cms后台编辑器显示不完整无法操作的处理方法...
- Sgg:知乎数据仓库实习面试
- PTA——出租车计价
- 东软 python 培训
- CSS/HTML制作W3School网页的导航条
- 人工智能基础---上机1:猴子摘香蕉