PHP多例模式介绍


Posted in PHP onJune 24, 2013

学习java就知道设计模式中有多例模式:

1、多例类可以有多个实例
2、多例类必须能够自我创建并管理自己的实例,并向外界提供自己的实例。

大家都知道PHP单例模式,却很少说PHP多例模式,下面是在wikipedia上看到的PHP多例模式的例子:

<?php 
abstract class Multiton { 
    private static $instances = array(); 
    public static function getInstance() { 
$key = get_called_class() . serialize(func_get_args()); 
if (!isset(self::$instances[$key])) { 
$rc = new ReflectionClass(get_called_class()); 
self::$instances[$key] = $rc->newInstanceArgs(func_get_args()); 
} 
return self::$instances[$key]; 
    } 
} class Hello extends Multiton { 
public function __construct($string = 'World') { 
echo "Hello $string\n"; 
} 
} 
class GoodBye extends Multiton { 
public function __construct($string = 'my', $string2 = 'darling') { 
echo "Goodbye $string $string2\n"; 
} 
} 
$a = Hello::getInstance('World'); 
$b = Hello::getInstance('bob'); 
// $a !== $b 
$c = Hello::getInstance('World'); 
// $a === $c 
$d = GoodBye::getInstance(); 
$e = GoodBye::getInstance(); 
// $d === $e 
$f = GoodBye::getInstance('your'); 
// $d !== $f 
?>

可以看到PHP多例模式需要getInstance()传递关键值,对于给定的关键值,PHP多例模式只会存在唯一的对象实例,PHP多例模式节省内存,确保同一个对象的多个实例不发生冲突。

PHP 相关文章推荐
发布一个迷你php+AJAX聊天程序[聊天室]提供下载
Jul 21 PHP
攻克CakePHP系列三 表单数据增删改
Oct 22 PHP
怎样去阅读一份php源代码
Aug 21 PHP
PHP不用第三变量交换2个变量的值的解决方法
Jun 02 PHP
php实现utf-8转unicode函数分享
Jan 06 PHP
PHP5.3以上版本安装ZendOptimizer扩展
Mar 27 PHP
linux下为php添加iconv模块的方法
Feb 28 PHP
php 使用fopen函数创建、打开文件详解及实例代码
Sep 24 PHP
PHP实现QQ快速登录的方法
Sep 28 PHP
smarty模板数学运算示例
Dec 11 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
Feb 28 PHP
PHP7内核之Reference详解
Mar 14 PHP
PHP获取和操作配置文件php.ini的几个函数介绍
Jun 24 #PHP
PHP垃圾回收机制引用计数器概念分析
Jun 24 #PHP
PHP随机字符串生成代码(包括大小写字母)
Jun 24 #PHP
PHP 读取大文件的X行到Y行内容的实现代码
Jun 24 #PHP
解析在PHP中使用全局变量的几种方法
Jun 24 #PHP
探讨:array2xml和xml2array以及xml与array的互相转化
Jun 24 #PHP
解析Ubuntu下crontab命令的用法
Jun 24 #PHP
You might like
使用PHP计算两个路径的相对路径
2013/06/14 PHP
php判断数组中是否存在指定键(key)的方法
2015/03/17 PHP
JQuery 学习技巧总结
2010/05/21 Javascript
JS文本获得焦点清除文本文字的示例代码
2014/01/13 Javascript
用JS在浏览器中创建下载文件
2014/03/05 Javascript
Nodejs实现的一个静态服务器实例
2014/12/06 NodeJs
浅谈Javascript数组的使用
2015/07/29 Javascript
老生常谈遮罩层 滚动条的问题
2016/04/29 Javascript
js实现自动图片轮播代码
2017/03/22 Javascript
Js中使用正则表达式验证输入是否有特殊字符
2018/09/07 Javascript
如何在 JavaScript 中更好地利用数组
2018/09/27 Javascript
js中位运算的运用实例分析
2018/12/11 Javascript
layui数据表格 table.render 报错的解决方法
2019/09/29 Javascript
ES6 async、await的基本使用方法示例
2020/06/06 Javascript
javascript实现数字时钟效果
2021/02/06 Javascript
[06:20]2015国际邀请赛第三日top10
2015/08/08 DOTA
[52:41]OG vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/20 DOTA
python遍历文件夹并删除特定格式文件的示例
2014/03/05 Python
Python定时任务sched模块用法示例
2018/07/16 Python
python requests 测试代理ip是否生效
2018/07/25 Python
python实现嵌套列表平铺的两种方法
2018/11/08 Python
Python深拷贝与浅拷贝用法实例分析
2019/05/05 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
python匿名函数的使用方法解析
2019/10/10 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
python实现杨辉三角的几种方法代码实例
2021/03/02 Python
CSS3的Border-radius轻松制作圆角
2012/12/24 HTML / CSS
英国灯具和灯泡网上商店:Lights.co.uk
2018/02/02 全球购物
捷克厨房用品购物网站:Tescoma
2018/07/13 全球购物
《珍珠泉》教学反思
2014/02/20 职场文书
海飞丝的广告词
2014/03/20 职场文书
企业宣传工作方案
2014/06/02 职场文书
一份恶作剧的检讨书
2014/09/13 职场文书
2014年招生工作总结
2014/11/26 职场文书
2016简单的租房合同范本
2016/03/18 职场文书
python实现局部图像放大
2021/11/17 Python