基于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 相关文章推荐
基于mysql的论坛(1)
Oct 09 PHP
function.inc.php超越php
Dec 09 PHP
php写的简易聊天室代码
Jun 04 PHP
基于PHP读取csv文件内容的详解
Jun 18 PHP
基于PHP的简单采集数据入库程序
Jul 30 PHP
文件上传之SWFUpload插件(代码)
Jul 30 PHP
php 使用html5实现多文件上传实例
Oct 24 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Dec 14 PHP
php递归函数怎么用才有效
Feb 24 PHP
php实现微信支付之现金红包
May 30 PHP
php使用yield对性能提升的测试实例分析
Sep 19 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
Oct 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 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
2014/06/12 PHP
PHP实现图片自动清理的方法
2015/07/08 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
关于文本限制字数的js代码
2007/04/02 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
jQuery javaScript捕获回车事件(示例代码)
2013/11/07 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
使用jquery.qrcode生成彩色二维码实例
2014/08/08 Javascript
jquery彩色投票进度条简单实例演示
2020/07/23 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
js遍历获取表格内数据的方法(必看)
2017/04/06 Javascript
Angular中$state.go页面跳转并传递参数的方法
2017/05/09 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
vue+axios 前端实现登录拦截的两种方式(路由拦截、http拦截)
2018/10/24 Javascript
vue-cli 关闭热更新操作
2020/09/18 Javascript
vue3.0实现点击切换验证码(组件)及校验
2020/11/18 Vue.js
jQuery实现动态向上滚动
2020/12/21 jQuery
深入讲解Python中的迭代器和生成器
2015/10/26 Python
Python的标准模块包json详解
2017/03/13 Python
Python3标准库总结
2019/02/19 Python
python绘制规则网络图形实例
2019/12/09 Python
Python函数默认参数常见问题及解决方案
2020/03/26 Python
Python实现RabbitMQ6种消息模型的示例代码
2020/03/30 Python
Python编写单元测试代码实例
2020/09/10 Python
python 实现汉诺塔游戏
2020/11/28 Python
浅谈CSS3动画的回调处理
2016/07/21 HTML / CSS
加拿大当代时尚服饰、配饰和鞋类专业零售商和制造商:LE CHÂTEAU
2017/10/06 全球购物
美国领先的在线邮轮旅游公司:CruiseDirect
2018/06/07 全球购物
Vision Direct比利时:在线订购隐形眼镜
2019/08/27 全球购物
初中科学教学反思
2014/01/21 职场文书
高二学年自我鉴定范文(2篇)
2014/09/26 职场文书
党员个人总结范文
2015/02/14 职场文书
创业计划书之旅游网站
2019/09/06 职场文书
pytorch实现手写数字图片识别
2021/05/20 Python
小程序实现筛子抽奖
2021/05/26 Javascript
python APScheduler执行定时任务介绍
2022/04/19 Python