基于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 相关文章推荐
discuz论坛 用户登录 后台程序代码
Nov 27 PHP
PHP 一个比较完善的简单文件上传
Mar 25 PHP
zen cart新进商品的随机排序修改方法
Sep 10 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
Jun 29 PHP
基于php和mysql的简单的dao类实现crud操作功能
Jan 27 PHP
php模拟登陆的实现方法分析
Jan 09 PHP
PHP入门教程之数组用法汇总(创建,删除,遍历,排序等)
Sep 11 PHP
php注册和登录界面的实现案例(推荐)
Oct 24 PHP
PHP连接MySQL进行增、删、改、查操作
Feb 19 PHP
Yii2配置Nginx伪静态的方法
May 05 PHP
php正确输出json数据的实例讲解
Aug 21 PHP
TP5(thinkPHP5框架)实现显示错误信息及行号功能的方法
Jun 03 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
水质对咖图啡风味的影响具体有哪些
2021/03/03 冲泡冲煮
php扩展ZF――Validate扩展
2008/01/10 PHP
简单示例AJAX结合PHP代码实现登录效果代码
2008/07/25 PHP
PHP 判断变量类型实现代码
2009/10/23 PHP
php根据一个给定范围和步进生成数组的方法
2015/06/19 PHP
List the UTC Time on a Computer
2007/06/11 Javascript
面向对象的Javascript之二(接口实现介绍)
2012/01/27 Javascript
js中的时间转换—毫秒转换成日期时间的示例代码
2014/01/26 Javascript
js的[defer]和[async]属性
2014/11/24 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
javascript倒计时效果实现
2015/11/12 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
2016/11/01 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
vue 实现强制类型转换 数字类型转为字符串
2019/11/07 Javascript
Js代码中的span拼接问题解决
2019/11/22 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
nestjs返回给前端数据格式的封装实现
2021/02/22 Javascript
[01:33]真香警告!DOTA2勇士令状不朽珍藏Ⅱ饰品欣赏
2018/06/26 DOTA
python使用pil生成缩略图的方法
2015/03/26 Python
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
python Socket之客户端和服务端握手详解
2017/09/18 Python
python如何制作缩略图
2019/04/30 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
2019/06/04 Python
Python run()函数和start()函数的比较和差别介绍
2020/05/03 Python
移动HTML5前端框架—MUI的使用
2017/12/18 HTML / CSS
英国图书音像网站:Hive.co.uk(图书、电子书、DVD、蓝光、音乐CD等)
2017/10/16 全球购物
新电JAVA笔试题目
2014/08/31 面试题
学生发电厂实习自我鉴定
2013/09/22 职场文书
小学教师节活动方案
2014/01/31 职场文书
商务助理求职信范文
2014/04/20 职场文书
班级文化建设标语
2014/06/23 职场文书
开除通知书范本
2015/04/25 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS
VUE中的v-if与v-show区别介绍
2022/03/13 Vue.js
Python语法学习之进程的创建与常用方法详解
2022/04/08 Python