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 相关文章推荐
php5 and xml示例
Nov 22 PHP
在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载)
May 04 PHP
php中AES加密解密的例子小结
Feb 18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十五)
Jun 30 PHP
PHP防止表单重复提交的几种常用方法汇总
Aug 19 PHP
[原创]PHP字符串中插入子字符串方法总结
May 06 PHP
PHP文件及文件夹操作之创建、删除、移动、复制
Jul 13 PHP
基于PHP实现的多元线性回归模拟曲线算法
Jan 30 PHP
php实现微信公众号企业转账功能
Oct 01 PHP
PHP面向对象程序设计之多态性的应用示例
Dec 19 PHP
laravel框架上传图片实现实时预览功能
Oct 14 PHP
Laravel 解决419错误 -ajax请求错误的问题(CSRF验证)
Oct 25 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配置文件php.ini的路径的方法
2014/08/20 PHP
THINKPHP内容分页代码分享
2015/01/14 PHP
php通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
php 函数使用可变数量的参数方法
2017/05/02 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
2017/08/15 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
收集的10个免费的jQuery相册
2011/02/26 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
js实现数组去重方法及效率?Ρ? target=
2017/02/14 Javascript
slideToggle+slideup实现手机端折叠菜单效果
2017/05/25 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
Vue路由切换时的左滑和右滑效果示例
2018/05/29 Javascript
js数组去重的N种方法(小结)
2018/06/07 Javascript
vue实现整屏滚动切换
2020/06/29 Javascript
javascript开发实现贪吃蛇游戏
2020/07/31 Javascript
JavaScript中变量提升和函数提升的详解
2020/08/07 Javascript
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
2021/02/26 Vue.js
从零学python系列之教你如何根据图片生成字符画
2014/05/23 Python
ansible作为python模块库使用的方法实例
2017/01/17 Python
Python pyinotify模块实现对文档的实时监控功能方法
2018/10/13 Python
python使用pygame框架实现推箱子游戏
2018/11/20 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
详解python statistics模块及函数用法
2019/10/27 Python
python ETL工具 pyetl
2020/06/07 Python
在python下实现word2vec词向量训练与加载实例
2020/06/09 Python
如何在python中处理配置文件代码实例
2020/09/27 Python
Python headers请求头如何实现快速添加
2020/11/03 Python
Css3新特性应用之视觉效果实例
2016/12/12 HTML / CSS
HTML5实现分享到微信好友朋友圈QQ好友QQ空间微博二维码功能
2018/01/03 HTML / CSS
canvas如何绘制钟表的方法
2017/12/13 HTML / CSS
食堂采购员岗位职责
2014/03/17 职场文书
护士上岗前培训自我鉴定
2014/04/20 职场文书
公司离职证明范本(5篇)
2014/09/17 职场文书
2014年学校团委工作总结
2014/12/20 职场文书
教育教学读书笔记
2015/07/02 职场文书