@@ -114,7 +114,7 @@ public function getItem($key)
114114 $ this ->commit ();
115115 }
116116 if (isset ($ this ->deferred [$ key ])) {
117- return $ this ->deferred [$ key ];
117+ return clone $ this ->deferred [$ key ];
118118 }
119119
120120 $ f = $ this ->createCacheItem ;
@@ -138,38 +138,48 @@ public function getItems(array $keys = array())
138138 }
139139 $ f = $ this ->createCacheItem ;
140140 $ ids = array ();
141- $ items = array ();
142141
143142 foreach ($ keys as $ key ) {
144143 $ id = $ this ->getId ($ key );
145144
146145 if (isset ($ this ->deferred [$ key ])) {
147- $ items [ $ key] = $ this ->deferred [$ key ];
146+ yield $ key => clone $ this ->deferred [$ key ];
148147 } else {
149- $ ids [$ key ] = $ id ;
148+ $ ids [$ id ] = $ key ;
150149 }
151150 }
152151
153- $ values = $ this ->doFetch ($ ids );
154-
155- foreach ( $ ids as $ key => $ id ) {
156- $ isHit = isset ( $ values [$ id ]);
157- $ items [ $ key ] = $ f ( $ key , $ isHit ? $ values [ $ id ] : null , $ isHit );
152+ foreach ( $ this ->doFetch (array_keys ( $ ids )) as $ id => $ value ) {
153+ if ( isset ( $ ids [ $ id ])) {
154+ yield $ ids [ $ id ] => $ f ( $ key , $ value , true );
155+ unset( $ ids [$ id ]);
156+ }
158157 }
159158
160- return $ items ;
159+ foreach ($ ids as $ id => $ key ) {
160+ yield $ key => $ f ($ key , null , false );
161+ }
161162 }
162163
163164 /**
164165 * {@inheritdoc}
165166 */
166167 public function hasItem ($ key )
167168 {
168- if ($ this ->deferred ) {
169- $ this ->commit ();
169+ $ id = $ this ->getId ($ key );
170+
171+ if (isset ($ this ->deferred [$ key ])) {
172+ static $ prefix = "\0Symfony\Component\Cache\CacheItem \0" ;
173+ $ item = (array ) $ this ->deferred [$ key ];
174+ $ ok = $ this ->doSave (array ($ item [$ prefix .'key ' ] => $ item [$ prefix .'value ' ]), $ item [$ prefix .'lifetime ' ]);
175+ unset($ this ->deferred [$ key ]);
176+
177+ if (true === $ ok || array () === $ ok ) {
178+ return true ;
179+ }
170180 }
171181
172- return $ this ->doHave ($ this -> getId ( $ key ) );
182+ return $ this ->doHave ($ id );
173183 }
174184
175185 /**
0 commit comments