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操作excel文件 基于phpexcel
Jul 02 PHP
PHP运行时强制显示出错信息的代码
Apr 20 PHP
php模块memcache和memcached区别分析
Jun 14 PHP
深入PHP autoload机制的详解
Jun 09 PHP
php中curl、fsocket、file_get_content三个函数的使用比较
May 09 PHP
php中数据库连接方式pdo和mysqli对比分析
Feb 25 PHP
php实现在多维数组中查找特定value的方法
Jul 29 PHP
PHPExcel 修改已存在Excel的方法
May 03 PHP
PHP给前端返回一个JSON对象的实例讲解
May 31 PHP
ThinkPHP框架实现的邮箱激活功能示例
Jun 15 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
Aug 21 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
Feb 15 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
shopex主机报错误请求解决方案(No such file or directory)
2011/12/27 PHP
php使用ob_start()实现图片存入变量的方法
2014/11/14 PHP
Avengerls vs Newbee BO3 第二场2.18
2021/03/10 DOTA
JQuery上传插件Uploadify使用详解及错误处理
2010/04/27 Javascript
原生javascript获取元素样式属性值的方法
2010/12/25 Javascript
jquery队列queue与原生模仿其实现方法分享
2014/03/25 Javascript
JavaScript中textRange对象使用方法小结
2015/03/24 Javascript
jquery实现无刷新验证码的简单实例
2016/05/19 Javascript
AngularJS  ng-table插件设置排序
2016/09/21 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
2017/03/07 Javascript
浅谈Angular4实现热加载开发旅程
2017/09/08 Javascript
Vue-cli3.X使用px2 rem遇到的问题及解决方法
2019/08/08 Javascript
JavaScript中的this原理及6种常见使用场景详解
2020/02/14 Javascript
vuex的数据渲染与修改浅析
2020/11/26 Vue.js
Python中的一些陷阱与技巧小结
2015/07/10 Python
Django URL传递参数的方法总结
2016/08/28 Python
python中json格式数据输出的简单实现方法
2016/10/31 Python
python生成随机图形验证码详解
2017/11/08 Python
Python判断是否json是否包含一个key的方法
2018/12/31 Python
Python跳出多重循环的方法示例
2019/07/03 Python
python爬虫中多线程的使用详解
2019/09/23 Python
Python脚本破解压缩文件口令实例教程(zipfile)
2020/06/14 Python
介绍一下SOA和SOA的基本特征
2016/02/24 面试题
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
2014年五四青年节活动方案
2014/03/29 职场文书
2014年社区民政工作总结
2014/12/02 职场文书
酒店宣传语大全
2015/07/13 职场文书
致接力运动员加油稿
2015/07/21 职场文书
迎国庆主题班会
2015/08/17 职场文书
筑梦中国心得体会
2016/01/18 职场文书
培训心得体会怎么写
2016/01/25 职场文书
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript
Python学习之os包使用教程详解
2022/03/21 Python
Nginx使用ngx_http_upstream_module实现负载均衡功能示例
2022/08/05 Servers
MySQL 原理与优化之Limit 查询优化
2022/08/14 MySQL