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 相关文章推荐
967 个函式
Oct 09 PHP
详解PHP显示MySQL数据的三种方法
Jun 05 PHP
PHP图片上传代码
Nov 04 PHP
php导出excel格式数据问题
Mar 11 PHP
php使用json_encode对变量json编码
Apr 07 PHP
PHP 验证登陆类分享
Mar 13 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
Jan 07 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
Apr 01 PHP
php版微信小店API二次开发及使用示例
Nov 12 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 PHP
PHP扩展类型及安装方式解析
Apr 27 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版)
2006/10/09 PHP
一篇入门的php Class 文章
2007/04/04 PHP
php实现利用phpexcel导出数据
2013/08/24 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
Convert Seconds To Hours
2007/06/16 Javascript
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
深入理解JavaScript系列(38):设计模式之职责链模式详解
2015/03/04 Javascript
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
jQuery插件expander实现图片翻转特效
2015/05/21 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
2016/01/27 Javascript
微信小程序 Template详解及简单实例
2017/01/05 Javascript
Bootstrap笔记之缩略图、警告框实例详解
2017/03/09 Javascript
Node接收电子邮件的实例代码
2017/07/21 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
Angular 封装并发布组件的方法示例
2018/04/19 Javascript
微信小程序网络请求封装示例
2018/07/24 Javascript
JavaScript使用Math.random()生成简单的验证码
2019/01/21 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
11个教程中不常被提及的JavaScript小技巧(推荐)
2019/04/17 Javascript
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
Python编程实现二分法和牛顿迭代法求平方根代码
2017/12/04 Python
Python实现获取系统临时目录及临时文件的方法示例
2019/06/26 Python
python过滤中英文标点符号的实例代码
2019/07/15 Python
利用CSS3的checked伪类实现OL的隐藏显示的方法
2010/12/18 HTML / CSS
HTML5如何为形状图上颜色怎么绘制具有颜色和透明度的矩形
2014/06/23 HTML / CSS
Java平台和其他软件平台有什么不同
2015/06/05 面试题
通用自荐信范文
2014/03/14 职场文书
广告学专业毕业生自荐信
2014/05/28 职场文书
最美乡村医生事迹材料
2014/06/02 职场文书
运动会横幅标语
2014/06/17 职场文书
2014年世界艾滋病日演讲稿
2014/11/28 职场文书
导游词之南京中山陵
2019/11/27 职场文书
SpringBoot快速入门详解
2021/07/21 Java/Android