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之PHP语法学习笔记1
Dec 17 PHP
深入PHP中慎用双等于(==)的详解
Jun 06 PHP
PHP二维数组排序的3种方法和自定义函数分享
Apr 09 PHP
php使用smtp发送支持附件的邮件示例
Apr 13 PHP
php采用ajax数据提交post与post常见方法总结
Nov 10 PHP
PHP图像处理类库MagickWand用法实例分析
May 21 PHP
谈谈 PHP7新增功能
Dec 16 PHP
PHP目录与文件操作技巧总结(创建,删除,遍历,读写,修改等)
Sep 11 PHP
php is_executable判断给定文件名是否可执行实例
Sep 26 PHP
thinkphp5 加载静态资源路径与常量的方法
Dec 24 PHP
laravel 使用auth编写登录的方法
Sep 30 PHP
php中get_object_vars()在数组的实例用法
Feb 22 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
Yii2针对游客、用户防范规则和限制的解决方法分析
2016/10/08 PHP
Yii框架弹出窗口组件CJuiDialog用法分析
2017/01/07 PHP
php头像上传预览实例代码
2017/05/02 PHP
PHP递归实现汉诺塔问题的方法示例
2017/11/25 PHP
ThinkPHP框架实现的微信支付接口开发完整示例
2019/04/10 PHP
可以文本显示的公告栏的js代码
2007/03/11 Javascript
Js 订制自己的AlertBox(信息提示框)
2009/01/09 Javascript
JS跨域总结
2012/08/30 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
微信小程序开发(一) 微信登录流程详解
2017/01/11 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
微信小程序语音同步智能识别的实现案例代码解析
2020/05/29 Javascript
vue中destroyed方法的使用说明
2020/07/21 Javascript
linux系统使用python获取cpu信息脚本分享
2014/01/15 Python
快速排序的算法思想及Python版快速排序的实现示例
2016/07/02 Python
pandas 将list切分后存入DataFrame中的实例
2018/07/03 Python
调试Django时打印SQL语句的日志代码实例
2019/09/12 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
CSS3弹性盒模型flex box快速入门心得(必看篇)
2016/05/24 HTML / CSS
SKECHERS官方旗舰店:美国舒适运动休闲品牌
2017/12/22 全球购物
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
学习党的群众路线教育实践活动心得体会
2014/03/01 职场文书
供货协议书范本
2014/04/22 职场文书
2014预备党员批评与自我批评思想汇报
2014/09/20 职场文书
四年级学生期末评语
2014/12/26 职场文书
社区党建工作总结2015
2015/05/13 职场文书
首次购房证明
2015/06/19 职场文书
60条职场经典语录,总有一条能触动你的心
2019/08/21 职场文书
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers