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 相关文章推荐
example2.php
Oct 09 PHP
计算一段日期内的周末天数的php代码(星期六,星期日总和)
Nov 12 PHP
php顺序查找和二分查找示例
Mar 27 PHP
php操作redis中的hash和zset类型数据的方法和代码例子
Jul 05 PHP
php5.3以后的版本连接sqlserver2000的方法
Jul 28 PHP
php+mysqli事务控制实现银行转账实例
Jan 29 PHP
php动态生成缩略图并输出显示的方法
Apr 20 PHP
PHP简单处理表单输入的特殊字符的方法
Feb 03 PHP
Yii配置与使用memcached缓存的方法
Jul 13 PHP
在php7中MongoDB实现模糊查询的方法详解
May 03 PHP
PHP设计模式之模板模式定义与用法详解
Dec 20 PHP
php面试实现反射注入的详细方法
Sep 30 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缓存类实例
2014/07/18 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
YII2自动登录Cookie总是失效的解决方法
2017/06/28 PHP
用Javascript 获取页面元素的位置的代码
2009/09/25 Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
2012/03/01 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
60行js代码实现俄罗斯方块
2015/03/31 Javascript
JavaScript实现非常简单实用的下拉菜单效果
2015/08/27 Javascript
JavaScript严格模式详解
2015/11/18 Javascript
基于Three.js插件制作360度全景图
2016/11/29 Javascript
BootStrap便签页的简单应用
2017/01/06 Javascript
layer.alert自定义关闭回调事件的方法
2019/09/27 Javascript
[49:42]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第一局
2016/03/04 DOTA
浅谈Python中的作用域规则和闭包
2018/03/20 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
Python的iOS自动化打包实例代码
2018/11/22 Python
pycham查看程序执行的时间方法
2018/11/29 Python
python之Flask实现简单登录功能的示例代码
2018/12/24 Python
Python 元组操作总结
2019/09/18 Python
Python 获取项目根路径的代码
2019/09/27 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
2020/01/19 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
2020/08/28 Python
CSS3制作缩略图的详细过程
2016/07/08 HTML / CSS
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
加拿大领先的牛仔零售商:Bluenotes
2018/01/22 全球购物
RealTek面试题
2016/06/28 面试题
入党自我鉴定范文
2013/10/04 职场文书
财务会计毕业生自荐信
2013/11/02 职场文书
麦当劳辞职信范文
2014/01/18 职场文书
迎新晚会策划方案
2014/06/13 职场文书
小学生植树节活动总结
2014/07/04 职场文书
刘公岛导游词
2015/02/05 职场文书
2015年乡镇人大工作总结
2015/04/22 职场文书
竞选稿之小学班干部
2019/10/31 职场文书
纯html+css实现Element loading效果
2021/08/02 HTML / CSS