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 smarty模版引擎中的缓存应用
Dec 02 PHP
用PHP将网址字符串转换成超链接(网址或email)
May 25 PHP
PHP中如何判断AJAX提交的数据
Feb 05 PHP
php中邮箱地址正则表达式实现与详解
Apr 24 PHP
php生成扇形比例图实例
Nov 06 PHP
浅谈php错误提示及查错方法
Jul 14 PHP
php用正则判断是否为数字的方法
Mar 25 PHP
php实现支付宝当面付(扫码支付)功能
May 30 PHP
PHP常用字符串函数小结(推荐)
Aug 05 PHP
PHP格式化显示时间date()函数代码
Oct 03 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
Aug 05 PHP
Laravel实现批量更新多条数据
Apr 06 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
肝肠寸断了解下!盘点史上最伤心的十大动漫
2020/03/04 日漫
php中对xml读取的相关函数的介绍一
2008/06/05 PHP
一个简单的php加密解密函数(动态加密)
2013/06/19 PHP
php实现的DateDiff和DateAdd时间函数代码分享
2014/08/16 PHP
php等比例缩放图片及剪切图片代码分享
2016/02/13 PHP
php 微信开发获取用户信息如何实现
2016/12/13 PHP
PHP实现常用排序算法的方法
2020/02/05 PHP
javascript JSON操作入门实例
2010/04/16 Javascript
js中关于new Object时传参的一些细节分析
2011/03/13 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
jquery判断元素的子元素是否存在的示例代码
2014/02/04 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
实现JavaScript高性能的数据存储
2016/12/11 Javascript
bootstrap配合Masonry插件实现瀑布式布局
2017/01/18 Javascript
node.js实现复制文本到剪切板的功能
2017/01/23 Javascript
浅谈js中startsWith 函数不能在任何浏览器兼容的问题
2017/03/01 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
2017/05/10 Javascript
Vue.js中组件中的slot实例详解
2017/07/17 Javascript
Vue.js组件实现选项卡以及切换特效
2019/07/24 Javascript
Vue实现按钮级权限方案
2019/11/21 Javascript
python基础教程之对象和类的实际运用
2014/08/29 Python
Python实现向QQ群成员自动发邮件的方法
2014/11/19 Python
Python中装饰器的一个妙用
2015/02/08 Python
python Manager 之dict KeyError问题的解决
2019/12/21 Python
如何通过Python3和ssl实现加密通信功能
2020/05/09 Python
python os模块在系统管理中的应用
2020/06/22 Python
优秀毕业自我鉴定
2014/02/15 职场文书
社区党建工作方案
2014/06/10 职场文书
四风问题个人对照检查材料
2014/09/26 职场文书
2014年电话客服工作总结
2014/12/09 职场文书
幽灵公主观后感
2015/06/09 职场文书
2016年社区党支部公开承诺书
2016/03/25 职场文书
如何解决.cuda()加载用时很长的问题
2021/05/24 Python
浅谈TypeScript 索引签名的理解
2021/10/16 Javascript
抖音动画片,皮皮虾,《治愈系》动画在用这首REMIX作为背景音乐,Anak ,The last world with you完整版
2022/03/16 杂记
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers