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 中使用随机数的三个步骤
Oct 09 PHP
处理单名多值表单的详解
Jun 08 PHP
PHP使用glob函数遍历目录或文件夹的方法
Dec 16 PHP
php简单分页类实现方法
Feb 26 PHP
php有效防止同一用户多次登录
Nov 19 PHP
Symfony核心类概述
Mar 17 PHP
Yii配置与使用memcached缓存的方法
Jul 13 PHP
PHP foreach遍历多维数组实现方式
Nov 16 PHP
php接口技术实例详解
Dec 07 PHP
关于PHP内置的字符串处理函数详解
Feb 04 PHP
PHP类与对象后期静态绑定操作实例详解
Dec 20 PHP
PHP后期静态绑定之self::限制实例分析
Dec 21 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
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
2014/07/04 PHP
php读取和保存base64编码的图片内容
2017/04/22 PHP
jQuery Flash/MP3/Video多媒体插件
2010/01/18 Javascript
使用jquery.qrcode生成彩色二维码实例
2014/08/08 Javascript
js实现图片放大和拖拽特效代码分享
2015/09/05 Javascript
基于jquery实现图片上传本地预览功能
2016/01/08 Javascript
Window.Open打开窗体和if嵌套代码
2016/04/15 Javascript
原生js仿jquery一些常用方法(必看篇)
2016/09/20 Javascript
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
微信小程序中子页面向父页面传值实例详解
2017/03/20 Javascript
BootStrap表单验证 FormValidation 调整反馈图标位置的实例代码
2017/05/17 Javascript
浅谈vue的踩坑路
2017/08/31 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
2017/12/04 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
微信小程序使用canvas自适应屏幕画海报并保存图片功能
2019/07/25 Javascript
JS实现随机抽取三人
2019/11/06 Javascript
理解生产者消费者模型及在Python编程中的运用实例
2016/06/26 Python
python版简单工厂模式
2017/10/16 Python
Python3和pyqt5实现控件数据动态显示方式
2019/12/13 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
迪斯尼商品官方网站:ShopDisney
2016/08/01 全球购物
美国知名的旅游网站:OneTravel
2018/10/09 全球购物
会话Bean的种类
2013/11/07 面试题
国际贸易个人求职信范文
2014/01/04 职场文书
应用英语专业自荐信
2014/01/26 职场文书
手工社团活动方案
2014/02/17 职场文书
大气污染防治方案
2014/05/19 职场文书
优秀研究生主要事迹
2014/06/03 职场文书
大学运动会加油稿200字(5篇)
2014/09/27 职场文书
反对四风自我剖析材料
2014/10/07 职场文书
项目战略合作意向书
2015/05/08 职场文书
教师节简报
2015/07/20 职场文书
2016干部作风整顿心得体会
2016/01/22 职场文书