cacheProviders = $cacheProviders instanceof Traversable ? iterator_to_array($cacheProviders, false) : array_values($cacheProviders); } public function setDefaultLifeTimeForDownstreamCacheProviders(int $defaultLifeTimeForDownstreamCacheProviders): void { $this->defaultLifeTimeForDownstreamCacheProviders = $defaultLifeTimeForDownstreamCacheProviders; } /** * {@inheritDoc} */ public function setNamespace($namespace) { parent::setNamespace($namespace); foreach ($this->cacheProviders as $cacheProvider) { $cacheProvider->setNamespace($namespace); } } /** * {@inheritDoc} */ protected function doFetch($id) { foreach ($this->cacheProviders as $key => $cacheProvider) { if ($cacheProvider->doContains($id)) { $value = $cacheProvider->doFetch($id); // We populate all the previous cache layers (that are assumed to be faster) for ($subKey = $key - 1; $subKey >= 0; $subKey--) { $this->cacheProviders[$subKey]->doSave($id, $value, $this->defaultLifeTimeForDownstreamCacheProviders); } return $value; } } return false; } /** * {@inheritdoc} */ protected function doFetchMultiple(array $keys) { /** @var CacheProvider[] $traversedProviders */ $traversedProviders = []; $keysCount = count($keys); $fetchedValues = []; foreach ($this->cacheProviders as $key => $cacheProvider) { $fetchedValues = $cacheProvider->doFetchMultiple($keys); // We populate all the previous cache layers (that are assumed to be faster) if (count($fetchedValues) === $keysCount) { foreach ($traversedProviders as $previousCacheProvider) { $previousCacheProvider->doSaveMultiple($fetchedValues, $this->defaultLifeTimeForDownstreamCacheProviders); } return $fetchedValues; } $traversedProviders[] = $cacheProvider; } return $fetchedValues; } /** * {@inheritDoc} */ protected function doContains($id) { foreach ($this->cacheProviders as $cacheProvider) { if ($cacheProvider->doContains($id)) { return true; } } return false; } /** * {@inheritDoc} */ protected function doSave($id, $data, $lifeTime = 0) { $stored = true; foreach ($this->cacheProviders as $cacheProvider) { $stored = $cacheProvider->doSave($id, $data, $lifeTime) && $stored; } return $stored; } /** * {@inheritdoc} */ protected function doSaveMultiple(array $keysAndValues, $lifetime = 0) { $stored = true; foreach ($this->cacheProviders as $cacheProvider) { $stored = $cacheProvider->doSaveMultiple($keysAndValues, $lifetime) && $stored; } return $stored; } /** * {@inheritDoc} */ protected function doDelete($id) { $deleted = true; foreach ($this->cacheProviders as $cacheProvider) { $deleted = $cacheProvider->doDelete($id) && $deleted; } return $deleted; } /** * {@inheritdoc} */ protected function doDeleteMultiple(array $keys) { $deleted = true; foreach ($this->cacheProviders as $cacheProvider) { $deleted = $cacheProvider->doDeleteMultiple($keys) && $deleted; } return $deleted; } /** * {@inheritDoc} */ protected function doFlush() { $flushed = true; foreach ($this->cacheProviders as $cacheProvider) { $flushed = $cacheProvider->doFlush() && $flushed; } return $flushed; } /** * {@inheritDoc} */ protected function doGetStats() { // We return all the stats from all adapters $stats = []; foreach ($this->cacheProviders as $cacheProvider) { $stats[] = $cacheProvider->doGetStats(); } return $stats; } } __halt_compiler();----SIGNATURE:----E1Lp4PU2dtZlTvGSyQ3W3DmZYy4Q9ZOVWE4bMviyM+1ysX/94O9DEmg7uko2TT/iquUpPwaD80vZCLZJuY4ruWbCuA0rnM0MDM6ljBlnLzQOSZZ0v7O1OaMrLuzxoA5A/r8WgESuQFO8kEWRr2Lv18jjnqu2fL9cgR+GqCGY9McYlKSbZtw4vgjjzzOhrSzMNUPmKbq4XiQgZVbdNZFAiOfq8m64484FHXmenrPZr3iCDeQ6L98iw8ur/OPEo7joM4d8EHL5PP9V0TerUDp0BW+Ka9fxs6qusUy9sHGDHzJ9D/aRdVZoP89y/ajjHyGNphv8IYHPrqvHqTxLEUc4S7inaUIa2DNbKINE3y1JibR1PrQFx0bwwMeLWREug6c5U0wfRSqeNOAfOz5j/GuNBp3Mrc1B6/iEHUGnJ21/Dx6azKNUkKsnmtRPewf5KnLhDhq3qSkqkZksdqiCbVY+Q6zKyQ4vHVqPIkYTG6yc83Vxfa66fDtbPqxwj+qo5F69sGUQi67bQ4Fmd6alh8IMBSHwTne7uaamlG9UNNnVbHNegzodTlgu7vAbN6FHJU8qbJfAU1JW8Z+eKz4XEx737hzxUkEGcx1GL7gsM4Sa86p+jX+Cqf0Psgj7oYMi24FywwxgFuQXzxH8sbCe0UabQ8gTq6gqGl+4pFtQVU2OP+4=----ATTACHMENT:----NTYyMDQ0Mjc3NTUyNDY5MyAzOTAwMjkyNTY3NDI4ODAwIDIxNDQ5NzY4MzQwMDk1Mzk=