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学习笔记之三 数据库基本操作
Jan 17 PHP
PHP调用Linux的命令行执行文件压缩命令
Jan 27 PHP
thinkphp模板的包含与渲染实例分析
Nov 26 PHP
php简单实现无限分类树形列表的方法
Mar 27 PHP
PHP中的traits简单使用实例
May 13 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
Aug 01 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
Oct 09 PHP
PHP strcmp()和strcasecmp()的区别实例
Nov 05 PHP
php实现生成带二维码图片并强制下载功能
Feb 24 PHP
PHP的PDO预定义常量讲解
Jan 24 PHP
VSCode+PHPstudy配置PHP开发环境的步骤详解
Aug 20 PHP
PHP+Mysql分布式事务与解决方案深入理解
Feb 27 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
Syphon 虹吸式咖啡壶冲煮–拨动法
2021/03/03 冲泡冲煮
PHP音乐采集(部分代码)
2007/02/14 PHP
PHP中strtotime函数使用方法分享
2012/01/10 PHP
PHP调用VC编写的COM组件实例
2014/03/29 PHP
Yii框架关联查询with用法分析
2014/12/02 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
动态表格Table类的实现
2009/08/26 Javascript
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
2010/11/16 Javascript
创建公共调用 jQuery Ajax 带返回值
2012/08/01 Javascript
js 关键词高亮(根据ID/tag高亮关键字)案例介绍
2013/01/21 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
jQuery中fadein与fadeout方法用法示例
2016/09/16 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
bootstrap配合Masonry插件实现瀑布式布局
2017/01/18 Javascript
Bootstrap笔记—折叠实例代码
2017/03/13 Javascript
解决AngualrJS页面刷新导致异常显示问题
2017/04/20 Javascript
nodejs制作爬虫实现批量下载图片
2017/05/19 NodeJs
Vue.js实现图片的随意拖动方法
2018/03/08 Javascript
vue中实现左右联动的效果
2018/06/22 Javascript
Vue infinite update loop的问题解决
2019/04/23 Javascript
使用express来代理服务的方法
2019/06/21 Javascript
JavaScript canvas实现文字时钟
2021/01/10 Javascript
Python交互式图形编程的实现
2019/07/25 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
Python调用graphviz绘制结构化图形网络示例
2019/11/22 Python
使用python模拟高斯分布例子
2019/12/09 Python
基于python实现数组格式参数加密计算
2020/04/21 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
实例教程 利用html5和css3打造一款创意404页面
2014/10/20 HTML / CSS
Gloeilampgoedkoop荷兰:在线购买灯泡
2019/02/16 全球购物
《夏夜多美》教学反思
2014/02/17 职场文书
党员公开承诺书内容
2014/05/20 职场文书
2014年公务员退休工资改革方案
2014/10/01 职场文书
学习作风建设心得体会
2014/10/22 职场文书
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS
vue 实现上传组件
2021/05/31 Vue.js