diff --git a/src/Symfony/Component/Cache/Adapter/ChainAdapter.php b/src/Symfony/Component/Cache/Adapter/ChainAdapter.php index c731e47ddd808..7512472150631 100644 --- a/src/Symfony/Component/Cache/Adapter/ChainAdapter.php +++ b/src/Symfony/Component/Cache/Adapter/ChainAdapter.php @@ -27,6 +27,7 @@ class ChainAdapter implements AdapterInterface { private $adapters = array(); + private $adapterCount; private $saveUp; /** @@ -50,6 +51,7 @@ public function __construct(array $adapters, $maxLifetime = 0) $this->adapters[] = new ProxyAdapter($adapter); } } + $this->adapterCount = count($this->adapters); $this->saveUp = \Closure::bind( function ($adapter, $item) use ($maxLifetime) { @@ -146,9 +148,10 @@ public function hasItem($key) public function clear() { $cleared = true; + $i = $this->adapterCount; - foreach ($this->adapters as $adapter) { - $cleared = $adapter->clear() && $cleared; + while ($i--) { + $cleared = $this->adapters[$i]->clear() && $cleared; } return $cleared; @@ -160,9 +163,10 @@ public function clear() public function deleteItem($key) { $deleted = true; + $i = $this->adapterCount; - foreach ($this->adapters as $adapter) { - $deleted = $adapter->deleteItem($key) && $deleted; + while ($i--) { + $deleted = $this->adapters[$i]->deleteItem($key) && $deleted; } return $deleted; @@ -174,9 +178,10 @@ public function deleteItem($key) public function deleteItems(array $keys) { $deleted = true; + $i = $this->adapterCount; - foreach ($this->adapters as $adapter) { - $deleted = $adapter->deleteItems($keys) && $deleted; + while ($i--) { + $deleted = $this->adapters[$i]->deleteItems($keys) && $deleted; } return $deleted; @@ -188,9 +193,10 @@ public function deleteItems(array $keys) public function save(CacheItemInterface $item) { $saved = true; + $i = $this->adapterCount; - foreach ($this->adapters as $adapter) { - $saved = $adapter->save($item) && $saved; + while ($i--) { + $saved = $this->adapters[$i]->save($item) && $saved; } return $saved; @@ -202,9 +208,10 @@ public function save(CacheItemInterface $item) public function saveDeferred(CacheItemInterface $item) { $saved = true; + $i = $this->adapterCount; - foreach ($this->adapters as $adapter) { - $saved = $adapter->saveDeferred($item) && $saved; + while ($i--) { + $saved = $this->adapters[$i]->saveDeferred($item) && $saved; } return $saved; @@ -216,9 +223,10 @@ public function saveDeferred(CacheItemInterface $item) public function commit() { $committed = true; + $i = $this->adapterCount; - foreach ($this->adapters as $adapter) { - $committed = $adapter->commit() && $committed; + while ($i--) { + $committed = $this->adapters[$i]->commit() && $committed; } return $committed;