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 相关文章推荐
PHP与MySQL开发的8个技巧小结
Dec 17 PHP
php中删除字符串中最先出现某个字符的实现代码
Feb 03 PHP
PHP删除目录及目录下所有文件的方法详解
Jun 06 PHP
解析PHP中如何将数组变量写入文件
Jun 06 PHP
PHP文件上传主要代码讲解
Sep 30 PHP
zf框架的db类select查询器join链表使用示例(zend框架)
Mar 14 PHP
PHP读取txt文本文件并分页显示的方法
Mar 11 PHP
PHP中的命名空间详细介绍
Jul 02 PHP
Zend Framework教程之动作的基类Zend_Controller_Action详解
Mar 07 PHP
ThinkPHP下表单令牌错误与解决方法分析
May 20 PHP
Yii框架日志记录Logging操作示例
Jul 12 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
Oct 08 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
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
php Sql Server连接失败问题及解决办法
2009/08/07 PHP
PHP可变函数的使用详解
2013/06/14 PHP
显示、隐藏密码
2006/07/01 Javascript
HTML-CSS群中单选引发的“事件”
2007/03/05 Javascript
jQuery select操作控制方法小结
2010/05/26 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
基于jquery实现select选择框内容左右移动添加删除代码分享
2015/08/25 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
javascript 解决浏览器不支持的问题
2016/09/24 Javascript
半个小时学json(json传递示例)
2016/12/25 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
vue父组件向子组件动态传值的两种方法
2017/11/11 Javascript
js保留两位小数方法总结
2018/01/31 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
layui监听单元格编辑前后交互的例子
2019/09/16 Javascript
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
python requests模拟登陆github的实现方法
2019/12/26 Python
python 图像增强算法实现详解
2021/01/24 Python
Python对excel的基本操作方法
2021/02/18 Python
新西兰便宜隐形眼镜购买网站:QUICKLENS New Zealand
2019/03/02 全球购物
如何在C# winform中异步调用web services
2015/09/21 面试题
美术师范毕业生自荐信
2013/11/16 职场文书
丑小鸭教学反思
2014/02/03 职场文书
就业推荐表自我鉴定范文
2014/03/21 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
交通安全横幅标语
2014/10/07 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
技术员岗位职责范本
2015/04/11 职场文书
贷款工作证明模板
2015/06/12 职场文书
退休教师追悼词
2015/06/23 职场文书
安全学习心得体会范文
2016/01/18 职场文书