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 相关文章推荐
第七节--类的静态成员
Nov 16 PHP
一些关于PHP的知识
Nov 17 PHP
php和js交互一例-PHP教程,PHP应用
Jan 03 PHP
PHP CURL模拟GET及POST函数代码
Apr 25 PHP
PHP面向对象程序设计之接口用法
Aug 20 PHP
php获取指定范围内最接近数的方法
Jun 02 PHP
php 在线导入mysql大数据程序
Jun 11 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
Jul 25 PHP
[原创]php正则删除img标签的方法示例
May 27 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
Thinkphp 框架扩展之驱动扩展实例分析
Apr 27 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操作数组的一些函数整理介绍
2011/07/17 PHP
php $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
PHP5.3连接Oracle客户端及PDO_OCI模块的安装方法
2016/05/13 PHP
php获取指定数量随机字符串的方法
2017/02/06 PHP
关于jquery性能最佳实践的讨论,与求教
2012/03/30 Javascript
将input file的选择的文件清空的两种解决方案
2013/10/21 Javascript
jQuery Mobile 导航栏代码
2013/11/01 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
2013/12/13 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
2015/09/15 Javascript
JS获取月份最后天数、最大天数与某日周数的方法
2015/12/08 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
JS实现复制内容到剪贴板功能兼容所有浏览器(推荐)
2016/06/17 Javascript
JavaScript编程中实现对象封装特性的实例讲解
2016/06/24 Javascript
AngularJS入门教程之AngularJS 模板
2016/08/18 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
JS+canvas画一个圆锥实例代码
2017/12/13 Javascript
vue中的数据绑定原理的实现
2018/07/02 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
2019/12/02 Javascript
[43:48]Ti4正赛第一天 VG vs NEWBEE 2
2014/07/19 DOTA
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
我用Python抓取了7000 多本电子书案例详解
2019/03/25 Python
PyTorch基本数据类型(一)
2019/05/22 Python
简单了解python协程的相关知识
2019/08/31 Python
解决c++调用python中文乱码问题
2020/07/29 Python
伦敦时尚生活的缩影:LN-CC
2017/01/24 全球购物
Booking.com缤客中国:全球酒店在线预订网站
2020/05/03 全球购物
酒店中秋节活动方案
2014/01/31 职场文书
优秀士兵先进事迹
2014/02/06 职场文书
意外死亡赔偿协议书
2014/10/14 职场文书
vue+springboot实现登录验证码
2021/05/27 Vue.js
浅谈Python数学建模之线性规划
2021/06/23 Python
Spring mvc是如何实现与数据库的前后端的连接操作的?
2021/06/30 Java/Android