Kaynağa Gözat

Use a local cache for handlers while iterating chunks of a multi-bulk reply.

Daniele Alessandri 14 yıl önce
ebeveyn
işleme
cf522ff2b4
1 değiştirilmiş dosya ile 9 ekleme ve 1 silme
  1. 9 1
      lib/Predis.php

+ 9 - 1
lib/Predis.php

@@ -609,10 +609,18 @@ class ResponseMultiBulkHandler implements IResponseHandler {
         $list = array();
 
         if ($listLength > 0) {
+            $handlers = array();
             $reader = $connection->getResponseReader();
             for ($i = 0; $i < $listLength; $i++) {
                 $header = $connection->readLine();
-                $handler = $reader->getHandler($header[0]);
+                $prefix = $header[0];
+                if (isset($handlers[$prefix])) {
+                    $handler = $handlers[$prefix];
+                }
+                else {
+                    $handler = $reader->getHandler($prefix);
+                    $handlers[$prefix] = $handler;
+                }
                 $list[$i] = $handler->handle($connection, substr($header, 1));
             }
         }