基于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 相关文章推荐
echo(),print(),print_r()之间的区别?
Nov 19 PHP
PHP中防止SQL注入实现代码
Feb 19 PHP
PHP随机数生成代码与使用实例分析
Apr 08 PHP
php 对输入信息的进行安全过滤的函数代码
Jun 29 PHP
ThinkPHP实现将本地文件打包成zip下载
Jun 26 PHP
PHP实现返回JSON和XML的类分享
Jan 28 PHP
PHP调试的强悍利器之PHPDBG
Feb 22 PHP
php插入mysql数据返回id的方法
May 31 PHP
ThinkPHP 5.x远程命令执行漏洞复现
Sep 23 PHP
php源码的使用方法讲解
Sep 26 PHP
详解Laravel服务容器的绑定与解析
Nov 05 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
《PHP编程最快明白》第四讲:日期、表单接收、session、cookie
2010/11/01 PHP
深入理解PHP变量的值类型和引用类型
2015/10/21 PHP
Laravel 集成 Geetest验证码的方法
2018/05/14 PHP
jquery 模拟雅虎首页的点击对话框效果
2010/04/11 Javascript
Jquery实现自定义tooltip示例代码
2014/02/12 Javascript
用jquery仿做发微博功能示例
2014/04/18 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
2015/03/13 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
浅析JS动态创建元素【两种方法】
2016/04/20 Javascript
jQuery Plupload上传插件的使用
2017/04/19 jQuery
在axios中使用params传参的时候传入数组的方法
2018/09/25 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
泛谈JS逻辑判断选择器 || &amp;&amp;
2019/05/24 Javascript
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
keep-alive保持组件状态的方法
2020/12/02 Javascript
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
Python中return语句用法实例分析
2015/08/04 Python
简单谈谈Python中的反转字符串问题
2016/10/24 Python
python opencv minAreaRect 生成最小外接矩形的方法
2019/07/01 Python
自适应线性神经网络Adaline的python实现详解
2019/09/30 Python
几款好用的python工具库(小结)
2020/10/20 Python
Python+OpenCV检测灯光亮点的实现方法
2020/11/02 Python
CSS3利用text-shadow属性实现多种效果的文字样式展现方法
2016/08/25 HTML / CSS
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
Kathmandu美国网站:新西兰户外运动品牌
2019/03/23 全球购物
国际贸易专业推荐信
2013/11/15 职场文书
幼儿园教学随笔感言
2014/02/23 职场文书
优秀求职信
2014/05/29 职场文书
南京市纪委监察局整改方案
2014/09/16 职场文书
工作时间擅自离岗检讨书
2014/10/24 职场文书
党员违纪检讨书怎么写
2014/11/01 职场文书
python自然语言处理之字典树知识总结
2021/04/25 Python
浅谈Python中的正则表达式
2021/06/28 Python
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
2022/06/01 Java/Android