基于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 相关文章推荐
windows下升级PHP到5.3.3的过程及注意事项
Oct 12 PHP
利用curl 多线程 模拟 并发的详解
Jun 14 PHP
修改apache配置文件去除thinkphp url中的index.php
Jan 17 PHP
PHP列出MySQL中所有数据库的方法
Mar 12 PHP
php中实现可以返回多个值的函数实例
Mar 21 PHP
php实现将任意进制数转换成10进制的方法
Apr 17 PHP
wampserver改变默认网站目录的办法
Aug 05 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
Dec 22 PHP
php 一维数组的循环遍历实现代码
Apr 10 PHP
PHP预定义超全局数组变量小结
Aug 20 PHP
PHP调用微博接口实现微博登录的方法示例
Sep 22 PHP
laravel validate 设置为中文的例子(验证提示为中文)
Sep 29 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
PHP7如何开启Opcode打造强悍性能详解
2018/05/11 PHP
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
IE不出现Flash激活框的小发现的js实现方法
2007/09/07 Javascript
JavaScript关于select的相关操作说明
2010/01/13 Javascript
jquery获取下拉列表的值为null的解决方法
2011/03/18 Javascript
JS中把字符转成ASCII值的函数示例代码
2013/11/21 Javascript
基于jQuery的图片不完全按比例自动缩小
2014/07/11 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
Bootstrap三种表单布局的使用方法
2016/06/21 Javascript
浅谈JS的基础类型与引用类型
2016/09/13 Javascript
jQuery实现的浮动层div浏览器居中显示效果
2017/02/03 Javascript
angular实现IM聊天图片发送实例
2017/05/08 Javascript
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
vue路由跳转传参数的方法
2019/05/06 Javascript
vue resource发送请求的几种方式
2019/09/30 Javascript
js消除图片小游戏代码
2019/12/11 Javascript
python处理中文编码和判断编码示例
2014/02/26 Python
django创建自定义模板处理器的实例详解
2017/08/14 Python
python使用itchat库实现微信机器人(好友聊天、群聊天)
2018/01/04 Python
Numpy数组转置的两种实现方法
2018/04/17 Python
使用Python自动化破解自定义字体混淆信息的方法实例
2019/02/13 Python
Python 没有main函数的原因
2020/07/10 Python
python如何利用paramiko执行服务器命令
2020/11/07 Python
Python列表的深复制和浅复制示例详解
2021/02/12 Python
Python实现Excel自动分组合并单元格
2021/02/22 Python
德国黑胶唱片、街头服装及运动鞋网上商店:HHV
2018/08/24 全球购物
怎样在 Applet 中建立自己的菜单(MenuBar/Menu)?
2012/06/20 面试题
10的分与合教学反思
2014/04/30 职场文书
前台岗位职责
2015/02/13 职场文书
统计员岗位职责范本
2015/04/14 职场文书
公司转让协议书
2016/03/19 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
《鲁班学艺》读后感3篇
2019/11/27 职场文书
golang中的空接口使用详解
2021/03/30 Python
js 数组 fill() 填充方法
2021/11/02 Javascript