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和AJAX创建RSS聚合器的代码
Mar 13 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
约瑟夫环问题的PHP实现 使用PHP数组内部指针操作函数
Oct 12 PHP
Php Image Resize图片大小调整的函数代码
Jan 17 PHP
php中将时间差转换为字符串提示的实现代码
Aug 08 PHP
php object转数组示例
Jan 15 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
Feb 15 PHP
详解php几行代码实现CSV格式文件输出
Jul 01 PHP
2017年最好用的9个php开发工具推荐(超好用)
Oct 23 PHP
php使用curl_init()和curl_multi_init()多线程的速度比较详解
Aug 15 PHP
php上传后台无法收到数据解决方法
Oct 28 PHP
php 利用socket发送GET,POST请求的实例代码
Jul 04 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中目录,文件操作详谈
2007/03/19 PHP
PHP实现提取一个图像文件并在浏览器上显示的代码
2012/10/06 PHP
php中convert_uuencode()与convert_uuencode函数用法实例
2014/11/22 PHP
Yii2搭建后台并实现rbac权限控制完整实例教程
2016/04/28 PHP
javascript js cookie的存储,获取和删除
2007/12/29 Javascript
JavaScript的Cookies
2008/01/16 Javascript
Js 获取Gridview选中行的内容操作步骤
2013/02/05 Javascript
form表单只提交数据而不进行页面跳转的解决方案
2013/09/18 Javascript
JavaScript的arguments对象应用示例
2014/09/15 Javascript
js仿黑客帝国字母掉落效果代码分享
2020/11/08 Javascript
13个PHP函数超实用
2015/10/21 Javascript
bootstrap datepicker 与bootstrapValidator同时使用时选择日期后无法正常触发校验的解决思路
2016/09/28 Javascript
Node解决简单重复问题系列之Excel内容的获取
2018/01/02 Javascript
微信小程序表单弹窗实例
2018/07/19 Javascript
ES6入门教程之Array.from()方法
2019/03/23 Javascript
layui表格分页 记录勾选的实例
2019/09/02 Javascript
[11:12]2018DOTA2国际邀请赛寻真——绿色长城OpTic
2018/08/10 DOTA
Python针对给定列表中元素进行翻转操作的方法分析
2018/04/27 Python
点球小游戏python脚本
2018/05/22 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
Python3基础教程之递归函数简单示例
2019/06/07 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
python实现PCA降维的示例详解
2020/02/24 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
2020/06/02 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
详解CSS 3 中的 calc() 方法
2018/01/12 HTML / CSS
CSS3 创建网页动画实现弹跳球动效果
2018/10/30 HTML / CSS
详解Canvas实用库Fabric.js使用手册
2019/01/07 HTML / CSS
高一政治教学反思
2014/01/28 职场文书
幼儿园门卫岗位职责
2014/02/14 职场文书
2014年法院工作总结
2014/11/24 职场文书
内勤岗位职责
2015/02/10 职场文书
毕业论文致谢范文
2015/05/14 职场文书
2015年学校党建工作总结
2015/05/19 职场文书
优质服务心得体会(共4篇)
2016/01/22 职场文书
详解Vue中$props、$attrs和$listeners的使用方法
2022/02/18 Vue.js