基于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数据库的PHP程序
Oct 09 PHP
php输出表格的实现代码(修正版)
Dec 29 PHP
php延迟静态绑定实例分析
Feb 08 PHP
php获取网页里所有图片并存入数组的方法
Apr 06 PHP
PHP执行SQL文件并将SQL文件导入到数据库
Sep 17 PHP
Symfony2创建页面实例详解
Mar 18 PHP
PHP如何使用Memcached
Apr 05 PHP
thinkphp5.0自定义验证规则使用方法
Nov 16 PHP
PHP简单验证码功能机制实例详解
Mar 27 PHP
基于PHP的登录和注册的功能的实现
Aug 06 PHP
php中数组最简单的使用方法
Dec 27 PHP
关于PHP数组迭代器的使用方法实例
Nov 17 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
中国站长站 For Dede4.0 采集规则
2007/05/27 PHP
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
摘自织梦CMS中的图片处理类
2015/08/08 PHP
csdn 论坛技术区平均给分功能
2009/11/07 Javascript
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
2010/08/12 Javascript
让你的博文自动带上缩址的实现代码,方便发到微博客上
2010/12/28 Javascript
suggestion开发小结以及对键盘事件的总结(针对中文输入法状态)
2011/12/20 Javascript
JS 两日期相减,获得天数的小例子(兼容IE,FF)
2013/07/01 Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
2017/01/23 Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
2017/09/11 Javascript
vue 使用eventBus实现同级组件的通讯
2018/03/02 Javascript
JS中用EL表达式获取上下文参数值的方法
2018/03/28 Javascript
详解在不使用ssr的情况下解决Vue单页面SEO问题
2018/11/08 Javascript
[05:04]完美世界携手游戏风云打造 卡尔工作室地图界面篇
2013/04/23 DOTA
[48:52]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第一局
2016/02/25 DOTA
5种Python单例模式的实现方式
2016/01/14 Python
Python 描述符(Descriptor)入门
2016/11/20 Python
python3中获取文件当前绝对路径的两种方法
2018/04/26 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
Python/Django后端使用PIL Image生成头像缩略图
2019/04/30 Python
python+selenium 鼠标事件操作方法
2019/08/24 Python
Lululemon加拿大官网:加拿大知名体育服装零售商
2019/04/12 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
什么是Rollback Segment
2013/04/22 面试题
预备党员转正思想汇报
2014/01/12 职场文书
端午节活动策划方案
2014/03/09 职场文书
共产党员承诺书
2014/03/25 职场文书
2014年心理健康教育工作总结
2014/12/06 职场文书
检讨书怎么写
2015/05/07 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
农村老人去世追悼词
2015/06/23 职场文书
HTML5+CSS+JavaScript实现捉虫小游戏设计和实现
2021/10/16 HTML / CSS
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android
Python数据可视化之Seaborn的安装及使用
2022/04/19 Python
VUE递归树形实现多级列表
2022/07/15 Vue.js