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快速url重写 更新版[需php 5.30以上]
Apr 20 PHP
php防止网站被刷新的方法汇总
Dec 01 PHP
php给每个段落添加空格的方法
Mar 20 PHP
PHP连接access数据库
Mar 27 PHP
PHP生成指定随机字符串的简单实现方法
Apr 01 PHP
PHP之浮点数计算比较以及取整数不准确的解决办法
Jul 29 PHP
ThinkPHP中limit()使用方法详解
Apr 19 PHP
php支持断点续传、分块下载的类
May 02 PHP
Yii的Srbac插件用法详解
Jul 14 PHP
php封装的mysqli类完整实例
Oct 18 PHP
php strftime函数获取日期时间(switch用法)
May 16 PHP
php获取微信基础接口凭证Access_token
Aug 23 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新手上路(十一)
2006/10/09 PHP
PHP分页显示制作详细讲解
2008/11/19 PHP
CI框架入门示例之数据库取数据完整实现方法
2014/11/05 PHP
php实现二进制和文本相互转换的方法
2015/04/18 PHP
PHP数组式访问接口ArrayAccess用法分析
2017/12/28 PHP
JQuery的ajax基础上的超强GridView展示
2009/09/18 Javascript
jquery ajax 登录验证实现代码
2009/09/23 Javascript
Javascript 面向对象(一)(共有方法,私有方法,特权方法)
2012/05/23 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
使用RequireJS优化JavaScript引用代码的方法
2015/07/01 Javascript
基于JavaScript实现动态添加删除表格的行
2016/02/01 Javascript
详解Bootstrap插件
2016/04/25 Javascript
JavaScript中instanceof运算符的使用示例
2016/06/08 Javascript
jQuery过滤选择器经典应用
2016/08/18 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
bootstrap table实例详解
2017/01/06 Javascript
React.js组件实现拖拽排序组件功能过程解析
2020/04/27 Javascript
Javascript执行流程细节原理解析
2020/05/14 Javascript
vue组件是如何解析及渲染的?
2021/01/13 Vue.js
[03:21]辉夜杯主赛事 12月25日TOP5
2015/12/26 DOTA
Python3里的super()和__class__使用介绍
2015/04/23 Python
python利用有道翻译实现&quot;语言翻译器&quot;的功能实例
2017/11/14 Python
Python自定义装饰器原理与用法实例分析
2018/07/16 Python
解决使用PyCharm时无法启动控制台的问题
2019/01/19 Python
python实现可逆简单的加密算法
2019/03/22 Python
python把转列表为集合的方法
2019/06/28 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
得到Class的三个过程是什么
2012/08/10 面试题
销售高级职员求职信
2013/10/29 职场文书
失业者真诚求职信范文
2013/12/25 职场文书
校园公益广告语
2014/03/13 职场文书
公务员爱岗敬业演讲稿
2014/08/26 职场文书
中秋节主题班会
2015/08/14 职场文书
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
2021/04/06 Python
nginx的zabbix 5.0安装部署的方法步骤
2021/07/16 Servers
Python Matplotlib绘制条形图的全过程
2021/10/24 Python