store = Array(); $this->store[0] = & $this; } // end :: __construct /** * Guarda a referência de um objeto no array $store. * * @access public * @param string $chave Chave usada para se guardar o objeto * @param object $obj Referência ao objeto a ser guardado * @return void */ public function set( $chave, & $obj ) { $this->store[$chave] = $obj; } // end :: set /** * Retorna a referência a um objeto guardado anteriormente com set() * * @access public * @param string $chave A chave utilizada para guardar o objeto * @return mixed O objeto guardado, caso ele exista. */ public function & get( $chave ) { if( array_key_exists( $chave, $this->store ) ) return $this->store[$chave]; } // end :: get /** * Este método estático deve ser usado para retornar uma instância * do registro. * * @access public * @return Object A instância do Registro * @static */ public static function instance() { if( ! Registry::$store ) Registry::$store[0] = new Registry(); return Registry::$store[0]; } // end :: instance } // end :: Registry ////////////////////////////// // Exemplo de uso // Classes auxiliares para ilustração class Conexao1 { public function query() { print "Executando query() da Conexao 1\n"; } // end :: query } // end :: Conexao1 class Conexao2 { public function query() { print "Executando query() da Conexao 2\n"; } // end :: query } // end :: Conexao2 class Conexao3 { public function query() { print "Executando query() da Conexao 3\n"; } // end :: query } // end :: Conexao3 // Cria-se um registro $reg = Registry::instance(); // Criam-se as conexões $c1 = new Conexao1(); $c2 = new Conexao2(); $c3 = new Conexao3(); // Guardam-se as conexões no registro $reg->set("conexao1", & $c1); $reg->set("conexao2", & $c2); $reg->set("conexao3", & $c3); // Executando query() de cada uma das conexões $reg->get("conexao1")->query(); $reg->get("conexao2")->query(); $reg->get("conexao3")->query(); ?>