@@ -104,65 +104,65 @@ protected function doFetch(array $ids): iterable
104
104
}
105
105
$ values = [];
106
106
107
- begin:
108
- $ getExpiry = false ;
109
-
110
- foreach ($ ids as $ id ) {
111
- if (null === $ value = $ this ->values [$ id ] ?? null ) {
112
- $ missingIds [] = $ id ;
113
- } elseif ('N; ' === $ value ) {
114
- $ values [$ id ] = null ;
115
- } elseif (!\is_object ($ value )) {
116
- $ values [$ id ] = $ value ;
117
- } elseif (!$ value instanceof LazyValue) {
118
- $ values [$ id ] = $ value ();
119
- } elseif (false === $ values [$ id ] = include $ value ->file ) {
120
- unset($ values [$ id ], $ this ->values [$ id ]);
121
- $ missingIds [] = $ id ;
107
+ while (true ) {
108
+ $ getExpiry = false ;
109
+
110
+ foreach ($ ids as $ id ) {
111
+ if (null === $ value = $ this ->values [$ id ] ?? null ) {
112
+ $ missingIds [] = $ id ;
113
+ } elseif ('N; ' === $ value ) {
114
+ $ values [$ id ] = null ;
115
+ } elseif (!\is_object ($ value )) {
116
+ $ values [$ id ] = $ value ;
117
+ } elseif (!$ value instanceof LazyValue) {
118
+ $ values [$ id ] = $ value ();
119
+ } elseif (false === $ values [$ id ] = include $ value ->file ) {
120
+ unset($ values [$ id ], $ this ->values [$ id ]);
121
+ $ missingIds [] = $ id ;
122
+ }
123
+ if (!$ this ->appendOnly ) {
124
+ unset($ this ->values [$ id ]);
125
+ }
122
126
}
123
- if (!$ this ->appendOnly ) {
124
- unset($ this ->values [$ id ]);
127
+
128
+ if (!$ missingIds ) {
129
+ return $ values ;
125
130
}
126
- }
127
131
128
- if (! $ missingIds ) {
129
- return $ values ;
130
- }
132
+ set_error_handler ( $ this -> includeHandler );
133
+ try {
134
+ $ getExpiry = true ;
131
135
132
- set_error_handler ( $ this -> includeHandler );
133
- try {
134
- $ getExpiry = true ;
136
+ foreach ( $ missingIds as $ k => $ id ) {
137
+ try {
138
+ $ file = $ this -> files [ $ id ] ??= $ this -> getFile ( $ id ) ;
135
139
136
- foreach ($ missingIds as $ k => $ id ) {
137
- try {
138
- $ file = $ this ->files [$ id ] ??= $ this ->getFile ($ id );
140
+ if (isset (self ::$ valuesCache [$ file ])) {
141
+ [$ expiresAt , $ this ->values [$ id ]] = self ::$ valuesCache [$ file ];
142
+ } elseif (\is_array ($ expiresAt = include $ file )) {
143
+ if ($ this ->appendOnly ) {
144
+ self ::$ valuesCache [$ file ] = $ expiresAt ;
145
+ }
139
146
140
- if (isset (self ::$ valuesCache [$ file ])) {
141
- [$ expiresAt , $ this ->values [$ id ]] = self ::$ valuesCache [$ file ];
142
- } elseif (\is_array ($ expiresAt = include $ file )) {
143
- if ($ this ->appendOnly ) {
144
- self ::$ valuesCache [$ file ] = $ expiresAt ;
147
+ [$ expiresAt , $ this ->values [$ id ]] = $ expiresAt ;
148
+ } elseif ($ now < $ expiresAt ) {
149
+ $ this ->values [$ id ] = new LazyValue ($ file );
145
150
}
146
151
147
- [$ expiresAt , $ this ->values [$ id ]] = $ expiresAt ;
148
- } elseif ($ now < $ expiresAt ) {
149
- $ this ->values [$ id ] = new LazyValue ($ file );
150
- }
151
-
152
- if ($ now >= $ expiresAt ) {
153
- unset($ this ->values [$ id ], $ missingIds [$ k ], self ::$ valuesCache [$ file ]);
152
+ if ($ now >= $ expiresAt ) {
153
+ unset($ this ->values [$ id ], $ missingIds [$ k ], self ::$ valuesCache [$ file ]);
154
+ }
155
+ } catch (\ErrorException $ e ) {
156
+ unset($ missingIds [$ k ]);
154
157
}
155
- } catch (\ErrorException $ e ) {
156
- unset($ missingIds [$ k ]);
157
158
}
159
+ } finally {
160
+ restore_error_handler ();
158
161
}
159
- } finally {
160
- restore_error_handler ();
161
- }
162
162
163
- $ ids = $ missingIds ;
164
- $ missingIds = [];
165
- goto begin;
163
+ $ ids = $ missingIds ;
164
+ $ missingIds = [];
165
+ }
166
166
}
167
167
168
168
protected function doHave (string $ id ): bool
0 commit comments