php单例模式的简单实现方法


Posted in PHP onJune 10, 2016

php单例模式的简单实现方法

<?php 
 
/** 
* 设计模式之单例模式 
* $_instance必须声明为静态的私有变量 
* 构造函数和析构函数必须声明为私有,防止外部程序new 
* 类从而失去单例模式的意义 
* getInstance()方法必须设置为公有的,必须调用此方法 
* 以返回实例的一个引用 
* ::操作符只能访问静态变量和静态函数 
* new对象都会消耗内存 
* 使用场景:最常用的地方是数据库连接。 
* 使用单例模式生成一个对象后, 
* 该对象可以被其它众多对象所使用。 
*/
class Example 
{ 
//保存例实例在此属性中 
private static $_instance; 
 
//构造函数声明为private,防止直接创建对象 
private function __construct() 
{ 
echo 'I am Construceted'; 
} 
 
//单例方法 
public static function singleton() 
{ 
if(!isset(self::$_instance)) 
{ 
$c=__CLASS__; 
self::$_instance=new $c; 
} 
return self::$_instance; 
} 
 
//阻止用户复制对象实例 
public function __clone() 
{ 
trigger_error('Clone is not allow' ,E_USER_ERROR); 
} 
 
function test() 
{ 
echo("test"); 
 
} 
} 
 
// 这个写法会出错,因为构造方法被声明为private 
$test = new Example; 
 
// 下面将得到Example类的单例对象 
$test = Example::singleton(); 
$test->test(); 
 
// 复制对象将导致一个E_USER_ERROR. 
$test_clone = clone $test; 
?>

首先我们要知道明确单例模式这个概念,那么什么是单例模式呢?

单例模式顾名思义,就是只有一个实例。

作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,

这个类我们称之为单例类。

单例模式的要点有三个:

一是某个类只能有一个实例;

二是它必须自行创建这个实例;

三是它必须自行向整个系统提供这个实例。

下面我们讨论下为什么要使用PHP单例模式?

多数 人都是从单例模式的字面上的意思来理解它的用途, 认为这是对系统资源的节省, 可以避免重复实例化, 是一种"计划生育". 而PHP每次执行完页面都是会从内存中清理掉所有的资源. 因而PHP中的单例实际每次运行都是需要重新实例化的, 这样就失去了单例重复实例化的意义了. 单单从这个方面来说, PHP的单例的确有点让各位失望. 但是单例仅仅只有这个功能和应用吗? 答案是否定的,我们一起来看看。

1. php的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 在使用面向对象的方式开发时(废话), 如果使用单例模式, 则可以避免大量的new 操作消耗的资源。

2. 如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看zend Framework的FrontController部分。

3. 在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo。

以上这篇php单例模式的简单实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP中的cookie不用刷新就生效的方法
Feb 04 PHP
显示youtube视频缩略图和Vimeo视频缩略图代码分享
Feb 13 PHP
详解js异步文件加载器
Jan 24 PHP
PHP函数import_request_variables()用法分析
Apr 02 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
May 18 PHP
Smarty模板变量调节器用法分析
May 23 PHP
PHP判断JSON对象是否存在的方法(推荐)
Jul 06 PHP
PHP实现留言板功能的详细代码
Mar 25 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 PHP
基于swoole实现多人聊天室
Jun 14 PHP
PHP支付宝当面付2.0代码
Dec 21 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
May 29 PHP
PHP操作mysql数据库分表的方法
Jun 09 #PHP
浅谈PHP链表数据结构(单链表)
Jun 08 #PHP
PHP Yaf框架的简单安装使用教程(推荐)
Jun 08 #PHP
WordPress分页伪静态加html后缀
Jun 08 #PHP
php 流程控制switch的简单实例
Jun 07 #PHP
php 使用curl模拟登录人人(校内)网的简单实例
Jun 06 #PHP
PHP session 会话处理函数
Jun 06 #PHP
You might like
PHP中的类-什么叫类
2006/11/20 PHP
纯真IP数据库的应用 IP地址转化成十进制
2009/06/14 PHP
php 代码优化的42条建议 推荐
2009/09/25 PHP
php获取mysql数据库中的所有表名的代码
2011/04/23 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
2012/02/19 PHP
php eval函数用法总结
2012/10/31 PHP
php获取json数据所有的节点路径
2015/05/17 PHP
thinkPHP显示不出验证码的原因与解决方法分析
2017/05/20 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
JavaScript判断密码强度(自写代码)
2013/09/06 Javascript
jquery制作居中遮罩层效果分享
2014/02/21 Javascript
基于jQuery的ajax方法封装
2016/07/14 Javascript
js事件驱动机制 浏览器兼容处理方法
2016/07/23 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
vue中的router-view组件的使用教程
2018/10/23 Javascript
vue项目动态设置页面title及是否缓存页面的问题
2018/11/08 Javascript
nodejs基础之buffer缓冲区用法分析
2018/12/26 NodeJs
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
[03:00]《DAC最前线》之欧美新秀VS老将
2015/02/01 DOTA
python嵌套字典比较值与取值的实现示例
2017/11/03 Python
详解django自定义中间件处理
2018/11/21 Python
python dlib人脸识别代码实例
2019/04/04 Python
django 信号调度机制详解
2019/07/19 Python
Python安装及Pycharm安装使用教程图解
2019/09/20 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
2020/06/29 Python
CSS3中使用RGBA设置透明度的示例
2015/08/04 HTML / CSS
利用纯CSS3实现动态的自行车特效源码
2017/01/20 HTML / CSS
使用html2canvas实现将html内容写入到canvas中生成图片
2020/01/03 HTML / CSS
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类
2012/02/06 面试题
Unix里面如何在后台运行程序
2016/10/14 面试题
青年教师典范事迹材料
2014/01/31 职场文书
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
法制宣传标语
2014/06/23 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书