Вход Регистрация
Файл: upload/core/vendor/twig/twig/src/Cache/ChainCache.php
Строк: 74
<?php

/*
 * This file is part of Twig.
 *
 * (c) Fabien Potencier
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace TwigCache;

/**
 * Chains several caches together.
 *
 * Cached items are fetched from the first cache having them in its data store.
 * They are saved and deleted in all adapters at once.
 *
 * @author Quentin Devos <quentin@devos.pm>
 */
final class ChainCache implements CacheInterfaceRemovableCacheInterface
{
    
/**
     * @param iterable<CacheInterface> $caches The ordered list of caches used to store and fetch cached items
     */
    
public function __construct(
        private 
iterable $caches,
    ) {
    }

    public function 
generateKey(string $namestring $className): string
    
{
        return 
$className.'#'.$name;
    }

    public function 
write(string $keystring $content): void
    
{
        
$splitKey $this->splitKey($key);

        foreach (
$this->caches as $cache) {
            
$cache->write($cache->generateKey(...$splitKey), $content);
        }
    }

    public function 
load(string $key): void
    
{
        [
$name$className] = $this->splitKey($key);

        foreach (
$this->caches as $cache) {
            
$cache->load($cache->generateKey($name$className));

            if (
class_exists($classNamefalse)) {
                break;
            }
        }
    }

    public function 
getTimestamp(string $key): int
    
{
        
$splitKey $this->splitKey($key);

        foreach (
$this->caches as $cache) {
            if (
$timestamp $cache->getTimestamp($cache->generateKey(...$splitKey))) {
                return 
$timestamp;
            }
        }

        return 
0;
    }

    public function 
remove(string $namestring $cls): void
    
{
        foreach (
$this->caches as $cache) {
            if (
$cache instanceof RemovableCacheInterface) {
                
$cache->remove($name$cls);
            }
        }
    }

    
/**
     * @return string[]
     */
    
private function splitKey(string $key): array
    {
        return 
array_reverse(explode('#'$key2));
    }
}
Онлайн: 0
Реклама