注册模式其实想实现的目的是:有条理的保存和管理对象。why? 开发者想把对象一个一个存放到一个变量里面,想像操作变量一样操作对象,比如
$arr=['zhangsan'=>3,'lisi'=>4];
如果 能通过zhangsan,lisi这个键来操作对象岂不是美滋滋?
那就能像操作变量一样操作对象了,unset等,巴适的很!
下面讲解一下注册模式的基本例子
<?php
class Registry {
protected static $store = array(); //静态变量存 多个对象 数据
private static $instance;
public static function instance() {
if(!isset(self::$instance)) {
self::$instance = new self();
}
return self::$instance;
}
//判断对象是否存在
public function isValid($key) {
return array_key_exists($key, Registry::$store);
}
//通过键获取对象
public function get($key) {
if (array_key_exists($key, Registry::$store))
return Registry::$store[$key];
}
//通过键值设置对象
public function set($key, $obj) {
Registry::$store[$key] = $obj;
}
}
//例子类
class ConnectDB {
private $host;
private $username;
private $password;
private $conn;
public function __construct($host, $username, $password){
$this->host = $host;
$this->username = $username;
$this->password = $password;
}
public function getConnect() {
return mysql_connect($this->host,$this->username,$this->password);
}
}
//使用测试
$reg = Registry::instance();
//把对象①存入变量
$reg->set('db1', new ConnectDB('localhost', 'root', 'mckee'));
//把对象②存入变量
$reg->set('db2', new ConnectDB('192.168.1.198', 'test', '0K5Dt@2jdc8#x@'));
print_r($reg->get('db1'));
print_r($reg->get('db2'));
总结:注册模式,主要想像操作变量一样,对多个对象进行存放和管理。