php面向对象值单例模式


Posted in PHP onMay 03, 2016
单例模式(职责模式):
简单的说,一个对象(在学习设计模式之前,需要比较了解面向对象思想)只负责一个特定的任务;
单例类:
1、构造函数需要标记为private(访问控制:防止外部代码使用new操作符创建对象),单例类不能在其他类中实例化,只能被其自身实例化;
2、拥有一个保存类的实例的静态成员变量
3、拥有一个访问这个实例的公共的静态方法(常用getInstance()方法进行实例化单例类,通过instanceof操作符可以检测到类是否已经被实例化)
另外,需要创建__clone()方法防止对象被复制(克隆)
为什么要使用PHP单例模式?
1、php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 使用单例模式, 则可以避免大量的new 操作消耗的资源。
2、如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看ZF的FrontController部分。
3、在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo。
代码实现:
<111?111php111
/1**
* 设计模式之单例模式
* $_instance必须声明为静态的私有变量
* 构造函数和析构函数必须声明为私有,防止外部程序new
* 类从而失去单例模式的意义
* getInstance()方法必须设置为公有的,必须调用此方法
* 以返回实例的一个引用
* ::操作符只能访问静态变量和静态函数
* new对象都会消耗内存
* 使用场景:最常用的地方是数据库连接。 
* 使用单例模式生成一个对象后,
* 该对象可以被其它众多对象所使用。 
*/
class Danli {
 
//保存类实例的静态成员变量
private static $_instance;
 
//private标记的构造方法
private function __construct(){
echo 'This is a Constructed method;';
}
 
//创建__clone方法防止对象被复制克隆
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 '调用方法成功';
}
 
}
 
//用new实例化private标记构造函数的类会报错
//$danli = new Danli();
 
//正确方法,用双冒号::操作符访问静态方法获取实例
$danli = Danli::getInstance();
$danli->test();
 
//复制(克隆)对象将导致一个E_USER_ERROR
$danli_clone = clone $danli;
PHP 相关文章推荐
echo(),print(),print_r()之间的区别?
Nov 19 PHP
实现 win2003 下 mysql 数据库每天自动备份
Dec 06 PHP
PHP var_dump遍历对象属性的函数与应用代码
Jun 04 PHP
linux iconv方法的使用
Oct 01 PHP
php中日期加减法运算实现代码
Dec 08 PHP
php中simplexml_load_string使用实例分享
Feb 13 PHP
php中的curl使用入门教程和常见用法实例
Apr 10 PHP
ThinkPHP实现跨模块调用操作方法概述
Jun 20 PHP
PHP获取指定月份第一天和最后一天的方法
Jul 18 PHP
微信支付扫码支付php版
Jul 22 PHP
基于PHP-FPM进程池探秘
Oct 17 PHP
PHP如何获取Cookie并实现模拟登录
Jul 16 PHP
php使用ffmpeg获取视频信息并截图的实现方法
May 03 #PHP
Linux环境下php实现给网站截图的方法
May 03 #PHP
PHPExcel笔记, mpdf导出
May 03 #PHP
PHP实现的进度条效果详解
May 03 #PHP
php实现按天数、星期、月份查询的搜索框
May 02 #PHP
php支持断点续传、分块下载的类
May 02 #PHP
php数组分页实现方法
Apr 30 #PHP
You might like
php截取指定2个字符之间字符串的方法
2015/04/15 PHP
php提高网站效率的技巧
2015/09/29 PHP
wordpress网站转移到本地运行测试的方法
2017/03/15 PHP
PHP实现的数组和XML文件相互转换功能示例
2018/03/15 PHP
jquery清空textarea等输入框实现代码
2013/04/22 Javascript
使用Grunt.js管理你项目的应用说明
2013/04/24 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
删除javascript中注释语句的正则表达式
2014/06/11 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
2015/08/27 Javascript
JavaScript操作XML/HTML比较常用的对象属性集锦
2015/10/30 Javascript
纯js实现手风琴效果
2020/04/17 Javascript
js实现无缝循环滚动
2020/06/23 Javascript
JQuery学习总结【二】
2016/12/01 Javascript
详解vee-validate的使用个人小结
2017/06/07 Javascript
JavaScript对象_动力节点Java学院整理
2017/06/23 Javascript
详解webpack分包及异步加载套路
2017/06/29 Javascript
浅谈JavaScript作用域和闭包
2017/09/18 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
Vue配置marked链接添加target=&quot;_blank&quot;的方法
2019/07/19 Javascript
JavaScript代理模式原理与用法实例详解
2020/03/10 Javascript
[10:28]2018DOTA2国际邀请赛寻真——VGJ.S寻梦之路
2018/08/15 DOTA
Python base64编码解码实例
2015/06/21 Python
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
简单谈谈python中的lambda表达式
2018/01/19 Python
Django框架验证码用法实例分析
2019/05/10 Python
Python 中list ,set,dict的大规模查找效率对比详解
2019/10/11 Python
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
通过实例解析python描述符原理作用
2020/01/22 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
使用OpenCV校准鱼眼镜头的方法
2020/11/26 Python
CSS3 清除浮动的方法示例
2018/06/01 HTML / CSS
出国签证在职证明
2014/01/16 职场文书
个人求职信范文分享
2014/01/31 职场文书
群众路线教育查摆剖析材料
2014/10/10 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
2016年记者节感言
2015/12/08 职场文书