基于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
用函数读出数据表内容放入二维数组
Oct 09 PHP
php中的实现trim函数代码
Mar 19 PHP
php数组中删除元素的实现代码
Jun 22 PHP
提高PHP编程效率的方法
Nov 07 PHP
PHP 正则表达式小结
Feb 12 PHP
PHP实现获取中英文首字母
Jun 19 PHP
php禁用cookie后session设置方法分析
Oct 19 PHP
php 修改上传文件大小限制实例详解
Oct 23 PHP
详解PHP防止盗链防止迅雷下载的方法
Apr 26 PHP
安装docker和docker-compose实例详解
Jul 30 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 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
php json_encode奇怪问题说明
2011/09/27 PHP
php无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
ThinkPHP单字母函数(快捷方法)使用总结
2014/07/23 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
2014/11/28 PHP
laravel orm 关联条件查询代码
2019/10/21 PHP
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
A标签触发onclick事件而不跳转的多种解决方法
2013/06/27 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
vue-cli项目根据线上环境分别打出测试包和生产包
2018/05/23 Javascript
快速解决vue-cli在ie9+中无效的问题
2018/09/04 Javascript
JS中使用new Option()实现时间联动效果
2018/12/10 Javascript
ionic2.0双击返回键退出应用
2019/09/17 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
keep-alive保持组件状态的方法
2020/12/02 Javascript
用Python设计一个经典小游戏
2017/05/15 Python
Python实现扩展内置类型的方法分析
2017/10/16 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
2018/03/19 Python
python opencv 二值化 计算白色像素点的实例
2019/07/03 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
Python调用.NET库的方法步骤
2019/12/27 Python
python3.4中清屏的处理方法
2020/07/06 Python
学点简单的Django之第一个Django程序的实现
2021/02/24 Python
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
Stührling手表官方网站:男女高品质时尚手表的领先零售商
2021/01/07 全球购物
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
jQuery treeview树形结构应用
2021/03/24 jQuery
中学教师实习自我鉴定
2013/09/28 职场文书
高中毕业典礼演讲稿
2014/09/09 职场文书
Windows 11上手初体验:任务栏和开始菜单等迎来大改
2021/11/21 数码科技
Python可视化学习之seaborn绘制矩阵图详解
2022/02/24 Python
python自动化测试之Selenium详解
2022/03/13 Python
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA
多线程Spring通过@Scheduled实现定时任务
2022/05/25 Java/Android