php面向对象值单例模式


Posted in PHP onMay 03, 2016
单例模式(职责模式):
简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务;
单例类:
1、构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化;
2、拥有一个保存类的实例的静态成员变量
3、拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化)
另外,需要创建__clone()方法防止对象被复制(克隆)
为什么要使用PHP单例模式?
1、php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源。
2、如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看ZF的FrontController部分。
3、在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo。
代码实现:
<111?111php111
/1**
* 设计模式之单例模式
* $_instance必须声明为静态的私有变量
* 构造函数和析构函数必须声明为私有,防止外部程序new
* 类从而失去单例模式的意义
* getInstance()方法必须设置为公有的,必须调用此方法
* 以返回实例的一个引用
* ::操作符只能访问静态变量和静态函数
* new对象都会消耗内存
* 使用场景:最常用的地方是数据库连接。 
* 使用单例模式生成一个对象后,
* 该对象可以被其它众多对象所使用。 
*/
class Danli {
 
//保存类实例的静态成员变量
private static $_instance;
 
//private标记的构造方法
private function __construct(){
echo 'This is a Constructed method;';
}
 
//创建__clone方法防止对象被复制克隆
public function __clone(){
trigger_error('Clone is not allow!',E_USER_ERROR);
}
 
//单例方法,用于访问实例的公共的静态方法
public static function getInstance(){
if(!(self::$_instance instanceof self)){
self::$_instance = new self;
}
return self::$_instance;
}
 
public function test(){
echo '调用方法成功';
}
 
}
 
//用new实例化private标记构造函数的类会报错
//$danli = new Danli();
 
//正确方法,用双冒号::操作符访问静态方法获取实例
$danli = Danli::getInstance();
$danli->test();
 
//复制(克隆)对象将导致一个E_USER_ERROR
$danli_clone = clone $danli;
PHP 相关文章推荐
php中文本操作的类
Mar 17 PHP
PHP 中英文混合排版中处理字符串常用的函数
Apr 12 PHP
php过滤危险html代码
Aug 18 PHP
PHP 开发环境配置(Zend Server安装)
Apr 28 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
Aug 22 PHP
PHP-redis中文文档介绍
Feb 07 PHP
getJSON跨域SyntaxError问题分析
Aug 07 PHP
PHP开发框架Laravel数据库操作方法总结
Sep 03 PHP
php在数组中查找指定值的方法
Mar 17 PHP
PHP实现文件上传和多文件上传
Dec 24 PHP
Zend Framework框架中实现Ajax的方法示例
Jun 27 PHP
Laravel 框架路由原理与路由访问实例分析
Apr 14 PHP
php使用ffmpeg获取视频信息并截图的实现方法
May 03 #PHP
Linux环境下php实现给网站截图的方法
May 03 #PHP
PHPExcel笔记, mpdf导出
May 03 #PHP
PHP实现的进度条效果详解
May 03 #PHP
php实现按天数、星期、月份查询的搜索框
May 02 #PHP
php支持断点续传、分块下载的类
May 02 #PHP
php数组分页实现方法
Apr 30 #PHP
You might like
简单的PHP留言本实例代码
2010/05/09 PHP
表单提交验证类
2006/07/14 Javascript
js 蒙版进度条(结合图片)
2010/03/10 Javascript
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
2011/11/10 Javascript
JS 毫秒转时间示例代码
2013/09/22 Javascript
javascript教程:关于if简写语句优化的方法
2014/05/17 Javascript
网站接入QQ登录的两种方法
2014/07/22 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
2014/12/19 Javascript
JavaScript中的this机制
2016/01/30 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
Bootstrap前端开发案例二
2016/06/17 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
[01:20:37]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/19 DOTA
[01:06]DOTA2小知识课堂 Ep.01 TP出门不要忘记帮队友灌瓶哦
2019/12/05 DOTA
Python多线程编程简单介绍
2015/04/13 Python
Python获取邮件地址的方法
2015/07/10 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
更改Python的pip install 默认安装依赖路径方法详解
2018/10/27 Python
python+pygame实现坦克大战
2019/09/10 Python
Python数据库小程序源代码
2019/09/15 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
python全局变量引用与修改过程解析
2020/01/07 Python
Pytorch mask_select 函数的用法详解
2020/02/18 Python
python中wx模块的具体使用方法
2020/05/15 Python
Pyqt助手安装PyQt5帮助文档过程图解
2020/11/20 Python
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
TCP/IP中的TCP和IP分别承担什么责任
2012/04/21 面试题
国际政治个人自荐信范文
2013/11/26 职场文书
企业元宵节主持词
2014/03/25 职场文书
个人租房协议书
2014/04/09 职场文书
运动会广播稿100字
2015/08/19 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书
详细聊聊vue中组件的props属性
2021/11/02 Vue.js