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 4.2书写安全的脚本
Oct 09 PHP
用PHP和ACCESS写聊天室(九)
Oct 09 PHP
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
Sep 24 PHP
也谈php网站在线人数统计
Apr 09 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
Jan 27 PHP
php array_map()数组函数使用说明
Jul 12 PHP
PHP Cookie的使用教程详解
Jun 03 PHP
ThinkPHP CURD方法之field方法详解
Jun 18 PHP
PHP内核探索之变量
Dec 22 PHP
[原创]php简单隔行变色功能实现代码
Jul 09 PHP
基于ThinkPHP实现的日历功能实例详解
Apr 15 PHP
在TP5数据库中四个字段实现无限分类的示例
Oct 18 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 输出json及显示json中的中文汉字详解及实例
2016/11/09 PHP
YII框架中使用memcache的方法详解
2017/08/02 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
2019/10/12 PHP
Laravel6.2中用于用户登录的新密码确认流程详解
2019/10/16 PHP
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
functional继承模式 摘自javascript:the good parts
2011/06/20 Javascript
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
2011/10/16 Javascript
了不起的node.js读书笔记之node.js中的特性
2014/12/22 Javascript
JS实现网页滚动条感应鼠标变色的方法
2015/02/26 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
JSONP原理及简单实现
2016/06/08 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
2017/10/14 jQuery
微信小程序中的上拉、下拉菜单功能
2020/03/13 Javascript
详解JavaScript的this指向和绑定
2020/09/08 Javascript
vue绑定class的三种方法
2020/12/24 Vue.js
Python创建二维数组实例(关于list的一个小坑)
2017/11/07 Python
python调用tcpdump抓包过滤的方法
2018/07/18 Python
解决Django Static内容不能加载显示的问题
2019/07/28 Python
Python对接支付宝支付自实现功能
2019/10/10 Python
Python爬虫基于lxml解决数据编码乱码问题
2020/07/31 Python
python 中 .py文件 转 .pyd文件的操作
2021/03/04 Python
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
薇诺娜官方网上商城:专注敏感肌肤
2017/05/25 全球购物
Madda Fella官网:美国冒险家服装品牌
2020/01/16 全球购物
swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上
2013/07/06 面试题
应届医学毕业生求职信分享
2013/12/02 职场文书
cf收人广告词大全
2014/03/14 职场文书
公司委托书范本
2014/04/04 职场文书
求职意向书
2014/07/29 职场文书
班组拓展活动方案
2014/08/14 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
大学生军训自我鉴定范文
2014/09/18 职场文书
2014年销售员工作总结
2014/12/01 职场文书
大三学生英语考试作弊检讨书
2015/01/01 职场文书
2015年感恩节演讲稿(优选篇)
2015/03/20 职场文书