基于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中的多态性[译]
Aug 02 PHP
如何使用Strace调试工具
Jun 03 PHP
PHP5常用函数列表(分享)
Jun 07 PHP
php实现用已经过去多长时间的方式显示时间
Jun 05 PHP
详解PHP中instanceof关键字及instanceof关键字有什么作用
Nov 05 PHP
Thinkphp单字母函数使用指南
May 08 PHP
PHP实现批量检测网站是否能够正常打开的方法
Aug 23 PHP
iOS自定义提示弹出框实现类似UIAlertView的效果
Nov 16 PHP
基于Laravel5.4实现多字段登录功能方法示例
Aug 11 PHP
PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)实例详解
Apr 20 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 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+mysql保存和输出文件
2006/10/09 PHP
php学习之变量的使用
2011/05/29 PHP
php array_map()数组函数使用说明
2011/07/12 PHP
PHP中使用imagick实现把PDF转成图片
2015/01/26 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
用js实现小球的自由移动代码
2013/04/22 Javascript
javascript制作照片墙及制作过程中出现的问题
2016/04/04 Javascript
详解jQuery uploadify文件上传插件的使用方法
2016/12/16 Javascript
微信小程序媒体组件详解(视频,音乐,图片)
2017/09/19 Javascript
Node.js创建Web、TCP服务器
2017/12/05 Javascript
vue动画效果实现方法示例
2019/03/18 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
vue父子组件间引用之$parent、$children
2020/05/20 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
基于python log取对数详解
2018/06/08 Python
python组合无重复三位数的实例
2018/11/13 Python
PyQt5固定窗口大小的方法
2019/06/18 Python
Python常用模块os.path之文件及路径操作方法
2019/12/03 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
解决python 执行sql语句时所传参数含有单引号的问题
2020/06/06 Python
python中复数的共轭复数知识点总结
2020/12/06 Python
CSS Houdini实现动态波浪纹效果
2019/07/30 HTML / CSS
HTML5之SVG 2D入门12—SVG DOM及DOM操作介绍
2013/01/30 HTML / CSS
挪威太阳镜和眼镜网上商城:SmartBuyGlasses挪威
2016/08/20 全球购物
法国时尚品牌乐都特瑞士站:La Redoute瑞士
2016/09/05 全球购物
英国异国风情旅游网站:Travel Talk Tours(团体旅游、探险旅游、帆船假期)
2018/07/26 全球购物
美国领先的低折扣旅行网站:Hotwire
2019/01/19 全球购物
Cult Gaia官网:美国生活方式品牌
2019/08/16 全球购物
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
邮政竞聘演讲稿
2014/09/03 职场文书
八达岭长城导游词
2015/01/30 职场文书
2019 入党申请书范文
2019/07/10 职场文书
python爬虫--selenium模块
2021/03/31 Python
python用字节处理文件实例讲解
2021/04/13 Python
Python机器学习之基础概述
2021/05/19 Python
TV动画《史上最强大魔王转生为村民A》番宣CM公布
2022/04/01 日漫