基于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 相关文章推荐
php 缓存函数代码
Aug 27 PHP
初学CAKEPHP 基础教程
Nov 02 PHP
浅析php插件 HTMLPurifier HTML解析器
Jul 01 PHP
php获取文章上一页与下一页的方法
Dec 01 PHP
6个超实用的PHP代码片段
Aug 10 PHP
PHP面向对象自动加载机制原理与用法分析
Oct 14 PHP
PHP编程求最大公约数与最小公倍数的方法示例
May 29 PHP
Laravel如何自定义command命令浅析
Mar 23 PHP
thinkPHP框架通过Redis实现增删改查操作的方法详解
May 13 PHP
php判断目录存在的简单方法
Sep 26 PHP
laravel 解决后端无法获取到前端Post过来的值问题
Oct 22 PHP
PHP7移除的扩展和SAPI
Mar 09 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数组
2006/10/09 PHP
Discuz! Passport 通行证整合
2008/03/27 PHP
php自动适应范围的分页代码
2008/08/05 PHP
PHP添加Xdebug扩展的方法
2014/02/12 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
php适配器模式简单应用示例
2019/10/23 PHP
ArrayList类(增强版)
2007/04/04 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
2013/01/03 Javascript
JQuery+DIV自定义滚动条样式的具体实现
2013/06/25 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
2014/05/06 Javascript
点击A元素触发B元素的事件在IE8下会识别成A元素
2014/09/04 Javascript
Jquery api 速查表分享
2015/01/12 Javascript
浅谈JavaScript正则表达式分组匹配
2015/04/10 Javascript
Bootstrap每天必学之响应式导航、轮播图
2016/04/25 Javascript
详解Backbone.js框架中的模型Model与其集合collection
2016/05/05 Javascript
javascript正则表达式中分组详解
2016/07/17 Javascript
jquery实现文字单行横移或翻转(上下、左右跳转)
2017/01/08 Javascript
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
vue项目使用微信公众号支付总结及遇到的坑
2018/10/23 Javascript
使用Bootstrap做一个朝代历史表
2019/12/10 Javascript
JS图片懒加载的优点及实现原理
2020/01/10 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
vue 子组件修改data或调用操作
2020/08/07 Javascript
通过Python实现自动填写调查问卷
2017/09/06 Python
python difflib模块示例讲解
2017/09/13 Python
Python安装pycurl失败的解决方法
2018/10/15 Python
在Pycharm中修改文件默认打开方式的方法
2019/01/17 Python
opencv实现简单人脸识别
2021/02/19 Python
python爬虫模拟浏览器访问-User-Agent过程解析
2019/12/28 Python
python 错误处理 assert详解
2020/04/20 Python
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
银行求职信范文
2014/05/26 职场文书
计算机求职信
2014/07/02 职场文书
小学“向国旗敬礼”网上签名寄语活动总结
2014/09/27 职场文书
与死神共舞观后感
2015/06/15 职场文书
python爬虫selenium模块详解
2021/03/30 Python