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 getsiteurl()函数
Sep 05 PHP
PHP基础学习之流程控制的实现分析
Apr 28 PHP
解析如何在PHP下载文件名中解决乱码的问题
Jun 20 PHP
php获取CSS文件中图片地址并下载到本地的方法
Dec 02 PHP
PHP+Ajax实时自动检测是否联网的方法
Jul 01 PHP
Cygwin中安装PHP方法步骤
Jul 04 PHP
PHP获取网站中各文章的第一张图片的代码示例
May 20 PHP
PHP二维数组去重实例分析
Nov 18 PHP
php 生成加密公钥加密私钥实例详解
Jun 16 PHP
PHP ajax+jQuery 实现批量删除功能实例代码小结
Dec 06 PHP
php如何利用pecl安装mongodb扩展详解
Jan 09 PHP
php ActiveMQ的安装与使用方法图文教程
Feb 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/12/06 PHP
php Http_Template_IT类库进行模板替换
2009/03/19 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
2011/01/27 PHP
ThinkPHP的常用配置选项汇总
2016/03/24 PHP
Yii+upload实现AJAX上传图片的方法
2016/07/13 PHP
PHP实现添加购物车功能
2017/03/06 PHP
JavaScript学习笔记(十七)js 优化
2010/02/04 Javascript
js中scrollHeight,scrollWidth,scrollLeft,scrolltop等差别介绍
2012/05/16 Javascript
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
php+ajax+jquery实现点击加载更多内容
2015/05/03 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
ES6中字符串string常用的新增方法小结
2017/11/07 Javascript
解决Vue+Element ui开发中碰到的IE问题
2018/09/03 Javascript
小程序云开发部署攻略(图文教程)
2018/10/30 Javascript
layui 监听select选择 获取当前select的ID名称方法
2019/09/24 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
2019/11/13 Javascript
Vue切换Tab动态渲染组件的操作
2020/09/21 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
python将字符串转换成数组的方法
2015/04/29 Python
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
2020/01/10 Python
在keras中获取某一层上的feature map实例
2020/01/24 Python
python根据完整路径获得盘名/路径名/文件名/文件扩展名的方法
2020/04/22 Python
HTML5各种头部meta标签的功能(推荐)
2017/03/13 HTML / CSS
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
Crabtree & Evelyn欧盟:豪华洗浴、身体和护发
2021/03/09 全球购物
VC++笔试题
2014/10/13 面试题
临床医学应届生求职信
2013/11/06 职场文书
教师求职推荐信范文
2013/11/20 职场文书
工业学校毕业生自荐书
2014/01/03 职场文书
敬老文明号事迹材料
2014/01/16 职场文书
党员批评与自我批评
2014/10/15 职场文书
军人离婚协议书样本
2014/10/21 职场文书
Python通过m3u8文件下载合并ts视频的操作
2021/04/16 Python
Redis实现一个账号只能登录一个设备
2022/04/19 Redis