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 之 没有mysql支持时的替代方案
Oct 09 PHP
用PHP制作的意见反馈表源码
Mar 11 PHP
pdo中使用参数化查询sql
Aug 11 PHP
PHP CURL模拟登录新浪微博抓取页面内容 基于EaglePHP框架开发
Jan 16 PHP
解析用PHP读写音频文件信息的详解(支持WMA和MP3)
May 10 PHP
XAMPP安装与使用方法详细解析
Nov 27 PHP
PHP判断字符串长度的两种方法很实用
Sep 22 PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
Sep 23 PHP
php生成二维码图片方法汇总
Dec 17 PHP
Thinkphp 空操作、空控制器、命名空间(详解)
May 05 PHP
PHP的mysqli_set_charset()函数讲解
Jan 23 PHP
php报错502badgateway解决方法
Oct 11 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
Yii框架调试心得--在页面输出执行sql语句
2014/12/25 PHP
PHP实现活动人选抽奖功能
2017/04/19 PHP
php获取excel文件数据
2017/04/21 PHP
PHP实现RSA签名生成订单功能【支付宝示例】
2017/06/06 PHP
js汉字转拼音实现代码
2013/02/06 Javascript
用json方式实现在 js 中建立一个map
2014/05/02 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
Bootstrap基本布局实现方法详解
2016/11/25 Javascript
JQuery学习总结【二】
2016/12/01 Javascript
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
微信小程序使用form表单获取输入框数据的实例代码
2018/05/17 Javascript
一个简单的node.js界面实现方法
2018/06/01 Javascript
解决vue watch数据的方法被调用了两次的问题
2020/11/07 Javascript
python3抓取中文网页的方法
2015/07/28 Python
Django验证码的生成与使用示例
2017/05/20 Python
python web.py开发httpserver解决跨域问题实例解析
2018/02/12 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
Python读取txt文件数据的方法(用于接口自动化参数化数据)
2018/06/27 Python
详解Python的hasattr() getattr() setattr() 函数使用方法
2018/07/09 Python
Python selenium页面加载慢超时的解决方案
2020/03/18 Python
在Keras中利用np.random.shuffle()打乱数据集实例
2020/06/15 Python
Python日志器使用方法及原理解析
2020/09/27 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
Python数据分析库pandas高级接口dt的使用详解
2020/12/11 Python
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
SteelSeries赛睿官网:游戏外设和配件的领先制造商(耳机、键盘、鼠标和鼠标垫)
2018/06/17 全球购物
捷克街头、运动和滑板一站式商店:BoardStar.cz
2019/10/06 全球购物
检察院对照“四风”认真查找问题落实整改措施
2014/09/26 职场文书
开展批评与自我批评发言材料
2014/10/17 职场文书
初二学生评语大全
2014/12/26 职场文书
大雁塔英文导游词
2015/02/10 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
FP-growth算法发现频繁项集——发现频繁项集
2021/06/24 Python
深入理解 Golang 的字符串
2022/05/04 Golang