基于php设计模式中单例模式的应用分析


Posted in PHP onMay 15, 2013

单例模式:简单的说,一个对象只负责一个特定的任务。

单例类:
    1.构造函数需要标记为private,单例类不能再其他类中实例化,只能被其自身实例化
    2.拥有一个保存类的实例静态成员变量
    3.拥有一个访问这个实例的公共的静态方法。[常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到此类是否已经被实例化]
    注:需要创建__clone()方法防治对象被复制
作用:
    1.php的应用主要用于数据库,所以一个应用中会存在大量的数据库操作,使用单例模式,则可以避免大量new操作消耗的资源
    2.如果系统中需要一个类来全局控制某些配置信息,那么使用单例模式可以很方便的实现。参照ZF的FrontController部分
    3.在一个页面请求汇总,便于进行调试,因为所有的代码都集中在一个类中,我们可以在类中设置钩子,输出日志,从而避免到处var_dump,echo。

<?php 
class DanLi{ 
    //静态成员变量 
    private static $_instance; 
    //私有的构造方法 
    private function __construct(){ 
    } 
    //防止对象被克隆 
    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 "ok"; 
    } 
} //错误:$danli = new DanLi(); $danli_clone = clone $danli; 
//正确:$danli = DanLi::getInstance(); $danli->test(); 
?>
PHP 相关文章推荐
通过ICQ网关发送手机短信的PHP源程序
Oct 09 PHP
PHP产生随机字符串函数
Dec 06 PHP
使用php+apc实现上传进度条且在IE7下不显示的问题解决方法
Apr 25 PHP
PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
Jun 18 PHP
浅析php中常量,变量的作用域和生存周期
Aug 10 PHP
php中url函数介绍及使用示例
Feb 13 PHP
ThinkPHP实现事务回滚示例代码
Jun 23 PHP
thinkphp模板的包含与渲染实例分析
Nov 26 PHP
thinkPHP线上自动加载异常与修复方法实例分析
Dec 01 PHP
CakePHP框架Model关联对象用法分析
Aug 04 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
Jun 16 PHP
PHP实现文件上传后台处理脚本
Mar 04 PHP
基于php设计模式中工厂模式详细介绍
May 15 #PHP
php笔记之:数据类型与常量的使用分析
May 14 #PHP
PHP笔记之:基于面向对象设计的详解
May 14 #PHP
php在window iis的莫名问题的测试方法
May 14 #PHP
PHP处理excel cvs表格的方法实例介绍
May 13 #PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
May 13 #PHP
基于wordpress主题制作的具体实现步骤
May 10 #PHP
You might like
投票管理程序
2006/10/09 PHP
thinkPHP简单导入和使用阿里云OSSsdk的方法
2017/03/15 PHP
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
jquery操作checked属性以及disabled属性的多种方法
2014/06/20 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
详解Angular.js的$q.defer()服务异步处理
2016/11/06 Javascript
对比分析Django的Q查询及AngularJS的Datatables分页插件
2017/02/07 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
2017/08/25 Javascript
nodejs结合Socket.IO实现的即时通讯功能详解
2018/01/12 NodeJs
node实现生成带参数的小程序二维码并保存到本地功能示例
2018/12/05 Javascript
express 项目分层实践详解
2018/12/10 Javascript
Vue插槽原理与用法详解
2019/03/05 Javascript
JavaScript的一些小技巧分享
2021/01/06 Javascript
[09:31]2016国际邀请赛中国区预选赛Yao赛后采访 答题送礼
2016/06/27 DOTA
[51:17]Mski vs VGJ.S Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
Python自动化构建工具scons使用入门笔记
2015/03/10 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
2018/06/14 Python
selenium获取当前页面的url、源码、title的方法
2019/06/12 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
python中@property的作用和getter setter的解释
2020/12/22 Python
css3实现六边形边框的实例代码
2019/05/24 HTML / CSS
Html5大文件断点续传实现方法
2015/12/05 HTML / CSS
"引用"与指针的区别是什么
2016/09/07 面试题
医药代表个人求职信范本
2013/12/19 职场文书
初一英语教学反思
2014/01/11 职场文书
捐款倡议书范文
2014/02/02 职场文书
环保建议书400字
2014/05/14 职场文书
法定代表人身份证明书
2014/09/10 职场文书
施工安全协议书范本
2014/09/26 职场文书
关于清明节的演讲稿2015
2015/03/18 职场文书
工作感言一句话
2015/08/01 职场文书
导游词之无锡丝业博物馆
2019/11/12 职场文书
七年级话题作文之执着
2019/11/19 职场文书
简述Java中throw-throws异常抛出
2021/08/07 Java/Android