PHP多例模式介紹
學(xué)習(xí)java就知道設(shè)計模式中有多例模式:
1、多例類可以有多個實例
2、多例類必須能夠自我創(chuàng)建并管理自己的實例,并向外界提供自己的實例。
大家都知道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()傳遞關(guān)鍵值,對于給定的關(guān)鍵值,PHP多例模式只會存在唯一的對象實例,PHP多例模式節(jié)省內(nèi)存,確保同一個對象的多個實例不發(fā)生沖突。
相關(guān)文章
PHP針對偽靜態(tài)的注入總結(jié)【附asp與Python相關(guān)代碼】
這篇文章主要介紹了PHP針對偽靜態(tài)的注入,結(jié)合實例形式總結(jié)分析了php針對偽靜態(tài)的常見注入情況,并附帶asp與Python的相關(guān)操作代碼,對于php程序安全有一定借鑒價值,需要的朋友可以參考下2017-08-08PHP7.1方括號數(shù)組符號多值復(fù)制及指定鍵值賦值用法分析
這篇文章主要介紹了PHP7.1方括號數(shù)組符號多值復(fù)制及指定鍵值賦值用法,結(jié)合實例形式對比分析了php7數(shù)組復(fù)制與賦值的新特性與操作技巧,需要的朋友可以參考下2016-09-09PHP iconv 解決utf-8和gb2312編碼轉(zhuǎn)換問題
就一個很簡單的函數(shù)iconv();但是就是這個函數(shù)在網(wǎng)上找了很多例子,都無法成功轉(zhuǎn)換,這是為什么呢?2010-04-04PHP流Streams、包裝器wrapper概念與用法實例詳解
這篇文章主要介紹了PHP流Streams、包裝器wrapper概念與用法,結(jié)合實例形式分析了php中流Streams與包裝器wrapper的基本概念及使用方法,需要的朋友可以參考下2017-11-11