diff --git a/lib/Predis/ConnectionFactory.php b/lib/Predis/ConnectionFactory.php index 9d28d86b..e56df056 100644 --- a/lib/Predis/ConnectionFactory.php +++ b/lib/Predis/ConnectionFactory.php @@ -7,21 +7,11 @@ class ConnectionFactory implements IConnectionFactory { private $_instanceSchemes = array(); public function __construct(Array $schemesMap = null) { - self::ensureDefaultSchemes(); + $this->_instanceSchemes = self::ensureDefaultSchemes(); if (isset($schemesMap)) { - foreach ($schemesMap as $connectionClass) { - self::checkConnectionClass($connectionClass); + foreach ($schemesMap as $scheme => $connectionClass) { + $this->defineConnection($scheme, $connectionClass); } - $this->_instanceSchemes = $schemesMap; - } - } - - private static function ensureDefaultSchemes() { - if (!isset(self::$_globalSchemes)) { - self::$_globalSchemes = array( - 'tcp' => '\Predis\Network\StreamConnection', - 'unix' => '\Predis\Network\StreamConnection', - ); } } @@ -34,28 +24,36 @@ class ConnectionFactory implements IConnectionFactory { } } + private static function ensureDefaultSchemes() { + if (!isset(self::$_globalSchemes)) { + self::$_globalSchemes = array( + 'tcp' => '\Predis\Network\StreamConnection', + 'unix' => '\Predis\Network\StreamConnection', + ); + } + return self::$_globalSchemes; + } + public static function define($scheme, $connectionClass) { self::ensureDefaultSchemes(); self::checkConnectionClass($connectionClass); self::$_globalSchemes[$scheme] = $connectionClass; } + public function defineConnection($scheme, $connectionClass) { + self::checkConnectionClass($connectionClass); + $this->_instanceSchemes[$scheme] = $connectionClass; + } + public function create($parameters) { if (!$parameters instanceof IConnectionParameters) { $parameters = new ConnectionParameters($parameters); } - $scheme = $parameters->scheme; - if (isset($this->_instanceSchemes[$scheme])) { - $connection = $this->_instanceSchemes[$scheme]; - } - else if (isset(self::$_globalSchemes[$scheme])) { - $connection = self::$_globalSchemes[$scheme]; - } - else { + if (!isset($this->_instanceSchemes[$scheme])) { throw new ClientException("Unknown connection scheme: $scheme"); } - + $connection = $this->_instanceSchemes[$scheme]; return new $connection($parameters); } }