学习java就知道设计模式中有多例模式:
1、多例类可以有多个实例
2、多例类必须能够自我创建并管理自己的实例,并向外界提供自己的实例。
大家都知道PHP单例模式,却很少说PHP多例模式,下面是在wikipedia上看到的PHP多例模式的例子:
abstract class Multiton {
/** by http://www.phpddt.com */
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
?>
本文链接:http://www.cnblogs.com/phpddt/p/3141661.html,转载请注明。
单例(Singleton)模式和不常见的多例(Multiton)模式控制着应用程序中类的数量。如模式名称,单例只能实例化一次,只有一个对象,多例模式可以多次实例化。
基于Singleton的特性,我们经常用Singleton配置应用程序并定义应用程序中可能随时访问的变量。但有时并不推荐使用Singleton,因为它生成了一个全局状态且
该单一根对象没有封装任何系统功能。多数情况下,会使单元测试和调试变得困难。读者根据情况自行决定。
代码示例:
class SingletonExample{
private function __construct(){}//防止直接实例化
public static function getInstance(){ //不与任何对象有关联
static $instance=null; //调用此函数的所有代码共享该变量,不必要让其是类的静态变量
if($instance==null){
$instance=new SingletonExample();
}
return $instance;
}
}
$obj1=SingletonExample::getInstance();
$obj2=SingletonExample::getInstance();
var_dump($obj1===$obj2);// true 是同一个实例
?>
Multiton与singleton相似,不同的是后者需要getInstance()函数传递关键值。
对于给定的关键值只会存在唯一的对象实例,如果有多个节点,每个节点拥有唯一的表识符,且各个节点在某单次执行(如cms里的节点)可能出现多次,那么就可以用Multiton模式实现这些节点啊,Multiton节省内存,并确保同一个对象的多个实例不发生冲突.
示例:
2 class MultitonExample{
3 private function __construct(){}//防止直接实例化
4
5 public static function getInstance($key){
6 static $instance=array();
7 if(!array_key_exists($key,$instance)){
8 $instance[$key]=new SingletonExample();
9 }
10 return $instance($key);
11 }
12
13 };
14 ?>
参考资料:php和mysql专家编程
本文链接:http://www.cnblogs.com/HKUI/p/3140644.html,转载请注明。
PHP变量名区分大小写,函数名不区分大小写,经常被新手忽视的小细节,测试如下.
PHP变量名区分大小写测试:
$aaa = "phpddt.com";
$AAA = "PHPDDT.COM";
echo $aaa.'-'.$AAA; //phpddt.com-PHPDDT.COM
?>
PHP函数名不区分大小写测试:
function bbb(){
echo 'abc';
}
function BBB(){
echo "Abc";
}
?>
上面这段代码会报错:( ! ) Fatal error: Cannot redeclare BBB()
本文链接:http://www.cnblogs.com/phpddt/p/3139567.html,转载请注明。