基于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 相关文章推荐
跟我学小偷程序之成功偷取首页(第三天)
Oct 09 PHP
PHP数字格式化
Dec 06 PHP
我的php学习笔记(毕业设计)
Feb 21 PHP
php获取文件内容最后一行示例
Jan 09 PHP
php中获取主机名、协议及IP地址的方法
Nov 18 PHP
linux下实现定时执行php脚本
Feb 13 PHP
php实现多城市切换特效
Aug 09 PHP
PHP版本常用的排序算法汇总
Dec 20 PHP
微信利用PHP创建自定义菜单的方法
Aug 01 PHP
PHP中call_user_func_array回调函数的用法示例
Nov 26 PHP
PHP信号处理机制的操作代码讲解
Apr 19 PHP
Laravel如何实现适合Api的异常处理响应格式
Jun 14 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
VIM中设置php自动缩进为4个空格的方法详解
2013/06/14 PHP
PHP中余数、取余的妙用
2015/06/29 PHP
javascript OFFICE控件测试代码
2009/12/08 Javascript
js 可拖动列表实现代码
2011/12/13 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
2017/06/29 jQuery
详解nodejs的express如何自动生成项目框架
2017/07/12 NodeJs
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
2018/01/02 Javascript
vue2.0安装style/css loader的方法
2018/03/14 Javascript
vue.js实现会动的简历(包含底部导航功能,编辑功能)
2019/04/08 Javascript
详解Vue.js中引入图片路径的几种方式
2019/06/17 Javascript
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
Python中的赋值、浅拷贝、深拷贝介绍
2015/03/09 Python
CentOS中使用virtualenv搭建python3环境
2015/06/08 Python
Python可变参数函数用法实例
2015/07/07 Python
Python selenium如何设置等待时间
2016/09/15 Python
python中数据爬虫requests库使用方法详解
2018/02/11 Python
Python中函数参数调用方式分析
2018/08/09 Python
win7 x64系统中安装Scrapy的方法
2018/11/18 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
Pycharm中出现ImportError:DLL load failed:找不到指定模块的解决方法
2019/09/17 Python
python能开发游戏吗
2020/06/11 Python
英国领先的野生鸟类食品供应商:GardenBird
2018/08/09 全球购物
波兰在线香水店:Perfumy.pl
2019/08/12 全球购物
探亲邀请信范文
2014/01/30 职场文书
《在大海中永生》教学反思
2014/02/24 职场文书
原材料检验岗位职责
2014/03/15 职场文书
导师推荐信范文
2014/05/09 职场文书
KTV门卫岗位职责
2014/10/09 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
北京颐和园导游词
2015/01/30 职场文书
初中英语教师个人工作总结
2015/02/09 职场文书
JavaScript 去重和重复次数统计
2021/03/31 Javascript
Oracle使用别名的好处
2022/04/19 Oracle
在 Python 中利用 Pool 进行多线程
2022/04/24 Python