瀏覽代碼

Simplify Predis\ConnectionFactory.

Daniele Alessandri 14 年之前
父節點
當前提交
cd8b3535ef
共有 1 個文件被更改,包括 20 次插入22 次删除
  1. 20 22
      lib/Predis/ConnectionFactory.php

+ 20 - 22
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);
     }
 }