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时间戳与日期之间转换的实例介绍
Apr 19 PHP
解析php框架codeigniter中如何使用框架的session
Jun 24 PHP
php使用Cookie实现和用户会话的方法
Jan 21 PHP
php计算两个整数的最大公约数常用算法小结
Mar 05 PHP
PHP判断网络文件是否存在的方法
Mar 12 PHP
php 批量查询搜狗sogou代码分享
May 17 PHP
php实现的mongodb操作类
May 28 PHP
使用WordPress发送电子邮件的相关PHP函数用法解析
Dec 15 PHP
WordPress特定文章对搜索引擎隐藏或只允许搜索引擎查看
Dec 31 PHP
twig里使用js变量的方法
Feb 05 PHP
PHP常用文件操作函数和简单实例分析
Jun 03 PHP
php函数式编程简单示例
Aug 08 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的Laravel框架中使用AdminLTE模板来编写网站后台界面
2016/03/21 PHP
php生成0~1随机小数的方法(必看)
2017/04/05 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
php面向对象程序设计入门教程
2019/06/22 PHP
arguments对象
2006/11/20 Javascript
jquery 卷帘效果实现代码(不同方向)
2013/02/05 Javascript
简单实用jquery版三级联动select示例
2013/07/04 Javascript
javascript:文字不间断向左移动的实例代码
2013/08/08 Javascript
jQuery.event兼容各浏览器的event详细解析
2013/12/18 Javascript
Javascript中的数组常用方法解析
2016/06/17 Javascript
JS获取checkbox的个数简单实例
2016/08/19 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
React中jquery引用的实现方法
2017/09/12 jQuery
BootStrap点击保存后实现模态框自动关闭的思路(模态框)
2017/09/26 Javascript
浅谈如何使用 webpack 优化资源
2017/10/20 Javascript
详解node nvm进行node多版本管理
2017/10/21 Javascript
JS动态插入脚本和插入引用外部链接脚本的方法
2018/05/21 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
2019/04/08 Javascript
vue遍历生成的输入框 绑定及修改值示例
2019/10/30 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
[28:48]《真视界》- 2017年国际邀请赛
2017/09/27 DOTA
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
2018/04/28 Python
Python实现爬虫从网络上下载文档的实例代码
2018/06/13 Python
用Python shell简化开发
2018/08/08 Python
Python Django框架模板渲染功能示例
2019/11/08 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
Python中的X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]
2020/02/13 Python
Python 多线程共享变量的实现示例
2020/04/17 Python
基于python模拟TCP3次握手连接及发送数据
2020/11/06 Python
Html5实现iPhone开机界面示例代码
2013/06/30 HTML / CSS
韩国三星旗下的一家超市连锁店:Home Plus
2016/07/30 全球购物
马来西亚最热门的在线时尚商店:FashionValet
2018/11/11 全球购物
瑞典度假品牌:OAS
2019/05/28 全球购物
局域网定义和特性
2016/01/23 面试题
元旦晚会上单位领导演讲稿
2014/01/05 职场文书
科学发展观标语
2014/10/08 职场文书