2727class ChainAdapter implements AdapterInterface
2828{
2929 private $ adapters = array ();
30+ private $ adapterCount ;
3031 private $ saveUp ;
3132
3233 /**
@@ -50,6 +51,7 @@ public function __construct(array $adapters, $maxLifetime = 0)
5051 $ this ->adapters [] = new ProxyAdapter ($ adapter );
5152 }
5253 }
54+ $ this ->adapterCount = count ($ this ->adapters );
5355
5456 $ this ->saveUp = \Closure::bind (
5557 function ($ adapter , $ item ) use ($ maxLifetime ) {
@@ -146,9 +148,10 @@ public function hasItem($key)
146148 public function clear ()
147149 {
148150 $ cleared = true ;
151+ $ i = $ this ->adapterCount ;
149152
150- foreach ($ this -> adapters as $ adapter ) {
151- $ cleared = $ adapter ->clear () && $ cleared ;
153+ while ($ i -- ) {
154+ $ cleared = $ this -> adapters [ $ i ] ->clear () && $ cleared ;
152155 }
153156
154157 return $ cleared ;
@@ -160,9 +163,10 @@ public function clear()
160163 public function deleteItem ($ key )
161164 {
162165 $ deleted = true ;
166+ $ i = $ this ->adapterCount ;
163167
164- foreach ($ this -> adapters as $ adapter ) {
165- $ deleted = $ adapter ->deleteItem ($ key ) && $ deleted ;
168+ while ($ i -- ) {
169+ $ deleted = $ this -> adapters [ $ i ] ->deleteItem ($ key ) && $ deleted ;
166170 }
167171
168172 return $ deleted ;
@@ -174,9 +178,10 @@ public function deleteItem($key)
174178 public function deleteItems (array $ keys )
175179 {
176180 $ deleted = true ;
181+ $ i = $ this ->adapterCount ;
177182
178- foreach ($ this -> adapters as $ adapter ) {
179- $ deleted = $ adapter ->deleteItems ($ keys ) && $ deleted ;
183+ while ($ i -- ) {
184+ $ deleted = $ this -> adapters [ $ i ] ->deleteItems ($ keys ) && $ deleted ;
180185 }
181186
182187 return $ deleted ;
@@ -188,9 +193,10 @@ public function deleteItems(array $keys)
188193 public function save (CacheItemInterface $ item )
189194 {
190195 $ saved = true ;
196+ $ i = $ this ->adapterCount ;
191197
192- foreach ($ this -> adapters as $ adapter ) {
193- $ saved = $ adapter ->save ($ item ) && $ saved ;
198+ while ($ i -- ) {
199+ $ saved = $ this -> adapters [ $ i ] ->save ($ item ) && $ saved ;
194200 }
195201
196202 return $ saved ;
@@ -202,9 +208,10 @@ public function save(CacheItemInterface $item)
202208 public function saveDeferred (CacheItemInterface $ item )
203209 {
204210 $ saved = true ;
211+ $ i = $ this ->adapterCount ;
205212
206- foreach ($ this -> adapters as $ adapter ) {
207- $ saved = $ adapter ->saveDeferred ($ item ) && $ saved ;
213+ while ($ i -- ) {
214+ $ saved = $ this -> adapters [ $ i ] ->saveDeferred ($ item ) && $ saved ;
208215 }
209216
210217 return $ saved ;
@@ -216,9 +223,10 @@ public function saveDeferred(CacheItemInterface $item)
216223 public function commit ()
217224 {
218225 $ committed = true ;
226+ $ i = $ this ->adapterCount ;
219227
220- foreach ($ this -> adapters as $ adapter ) {
221- $ committed = $ adapter ->commit () && $ committed ;
228+ while ($ i -- ) {
229+ $ committed = $ this -> adapters [ $ i ] ->commit () && $ committed ;
222230 }
223231
224232 return $ committed ;
0 commit comments