PHP设计模式(二):注册模式

“注册模式” 就像“对象的电话簿”——储存并且能够取回对对象引用的登记簿,说白了就是一个全局对象的存取器,先看下面是一个简单示例:
class Registry{
	private static $_data = array();
	public static function get($name){
		return isset(self::$_data[$name])? self::$_data[$name] : '';
	}
	public static function set($name,$value){
		self::$_data[$name] = $value;
	}
}

Registry::set('db1',new mysql('user1', 'pass1', 'db1', 'host1'));
Registry::set('db2',new mysql('user1', 'pass1', 'db1', 'host1'));

class demo{
	public function o(){
		$db1 = Registry::get('db1');
		$db1->query('xxxx');
		$db2 = Registry::get('db2');
		$db2->query('xxxx');
	} 
}
通过往注册器里面添加两个不同数据库连接对象,这样在PHP代码的任何地方我们都可以通过操作同一个连接对象进行数据库操作。 大家是不是觉得这个应用跟上一章讲到的单例模式有点相似,通过单利模式我们也可以创建一个唯一的访问对象,何必还需要通过注册模式呢? 通过注册模式可以有一个统一的进出口,使得程序流程显得更加地合理规范,根据应用场合的不一样,我们可以自己选择使用那种设计模式编写代码。 注册模式只有这么简单的应用嚒? 当然不是,在许多框架中都用到注册模式,下面是一个简单示例,大家好好感受下.
class TT{
	public function you(){
		return 'fuck you!';
	}
}

Registry::set('fuck',new TT());


class A{
	public function __get($name){
		return Registry::get($name);
	}
}
class B extends A{
	public function T(){
		echo $this->fuck->you();
	}
}

(new B())->T(); //输出什么呢?

你可能感兴趣的:(Registry,注册模式)