基于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 park、unpark、ord 函数使用方法(二进制流接口应用实例)
Oct 19 PHP
php对大文件进行读取操作的实现代码
Jan 23 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
Jun 25 PHP
destoon实现VIP排名一直在前面排序的方法
Aug 21 PHP
PHP实现对png图像进行缩放的方法(支持透明背景)
Jul 15 PHP
php 把数字转换成汉字的代码
Jul 21 PHP
CodeIgniter自定义控制器MY_Controller用法分析
Jan 20 PHP
yum命令安装php7和相关扩展
Jul 04 PHP
PHP针对多用户实现更换头像功能
Sep 04 PHP
PHP实现微信JS-SDK接口选择相册及拍照并上传的方法
Dec 05 PHP
PHP中$GLOBALS与global的区别详解
Mar 21 PHP
PHP连接SQL server数据库测试脚本运行实例
Aug 24 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
PHPMYADMIN导入数据最大为2M的解决方法
2012/04/23 PHP
Yii实现MySQL多数据库和读写分离实例分析
2014/12/03 PHP
PHP输出日历表代码实例
2015/03/27 PHP
Yii2框架配置文件(Application属性)与调试技巧实例分析
2019/05/27 PHP
PHP使用PDO 连接与连接管理操作实例分析
2020/04/21 PHP
Javascript下IE与Firefox下的差异兼容写法总结
2010/06/18 Javascript
JavaScript动态创建div属性和样式示例代码
2013/10/09 Javascript
利用jquery.qrcode在页面上生成二维码且支持中文
2014/02/12 Javascript
Jquery Uploadify上传带进度条的简单实例
2014/02/12 Javascript
浅析JS中document对象的一些重要属性
2014/03/06 Javascript
node.js实现多图片上传实例
2014/06/03 Javascript
ECMAScript 6即将带给我们新的数组操作方法前瞻
2015/01/06 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
详解vue-router 2.0 常用基础知识点之router.push()
2017/05/10 Javascript
AngularJS页面带参跳转及参数解析操作示例
2017/06/28 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
[52:14]VG vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python程序设计入门(5)类的使用简介
2014/06/16 Python
Python编写屏幕截图程序方法
2015/02/18 Python
python处理按钮消息的实例详解
2017/07/11 Python
对numpy中轴与维度的理解
2018/04/18 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
python实现图片,视频人脸识别(opencv版)
2020/11/18 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
html5小技巧之通过document.head获取head元素
2014/06/04 HTML / CSS
《地震中的父与子》教学反思
2014/04/10 职场文书
艾滋病宣传活动总结
2014/05/08 职场文书
视光学专业自荐信
2014/06/24 职场文书
2015年元旦标语大全
2014/12/09 职场文书
大学生自我评价范文
2015/03/03 职场文书
我们的节日重阳节活动总结
2015/03/24 职场文书
销售督导岗位职责
2015/04/10 职场文书
2015年小学教导处工作总结
2015/05/26 职场文书