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 相关文章推荐
桌面中心(三)修改数据库
Oct 09 PHP
解析在PHP中使用全局变量的几种方法
Jun 24 PHP
php使用strtotime和date函数判断日期是否有效代码分享
Dec 25 PHP
php根据isbn书号查询amazon网站上的图书信息的示例
Feb 13 PHP
PHP中JSON的应用技巧
Oct 10 PHP
详解PHP序列化反序列化的方法
Oct 27 PHP
在WordPress中实现发送http请求的相关函数解析
Dec 29 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
May 09 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
PHP实现正则表达式分组捕获操作示例
Feb 03 PHP
php中的钩子理解及应用实例分析
Aug 30 PHP
php新建文件的方法实例
Sep 26 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
全国FM电台频率大全 - 4 山西省
2020/03/11 无线电
PHP 开发工具
2006/12/06 PHP
如何隐藏你的.php文件
2007/01/04 PHP
php简单静态页生成过程
2008/03/27 PHP
PHP对接微信公众平台消息接口开发流程教程
2014/03/25 PHP
PHP+MYSQL中文乱码问题
2015/07/01 PHP
PHP用mb_string函数库处理与windows相关中文字符及Win环境下开启PHP Mb_String方法
2015/11/11 PHP
Thinkphp框架中D方法与M方法的区别
2016/12/23 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
ThinkPHP3.1.x修改成功与失败跳转页面的方法
2017/09/29 PHP
PHP CURL与java http使用方法详解
2018/01/26 PHP
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
教你如何使用PHP输出中文JSON字符串
2014/05/22 Javascript
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
AngularJS入门教程之服务(Service)
2016/07/27 Javascript
jQuery实现的简单百分比进度条效果示例
2016/08/01 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
jQuery实现按比例缩放图片的方法
2017/04/29 jQuery
Express框架之connect-flash详解
2017/05/31 Javascript
通过seajs实现JavaScript的模块开发及按模块加载
2019/06/06 Javascript
javascript事件循环event loop的简单模型解释与应用分析
2020/03/14 Javascript
Element Badge标记的使用方法
2020/07/27 Javascript
dataframe设置两个条件取值的实例
2018/04/12 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
用pycharm开发django项目示例代码
2018/10/24 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
2019/06/24 Python
Expedia丹麦:全球领先的旅游网站
2018/03/18 全球购物
护理学中专毕业生求职信
2013/11/11 职场文书
大学生自我鉴定范文
2013/12/28 职场文书
元旦寄语大全
2014/04/10 职场文书
副总经理任命书
2014/06/05 职场文书
2014年个人业务工作总结
2014/11/17 职场文书
深入浅析React中diff算法
2021/05/19 Javascript
python使用glob检索文件的操作
2021/05/20 Python
简述Java中throw-throws异常抛出
2021/08/07 Java/Android