rector/packages/Caching/ValueObject/Storage/MemoryCacheStorage.php
2022-07-27 08:28:59 +00:00

50 lines
1.2 KiB
PHP

<?php
declare (strict_types=1);
namespace Rector\Caching\ValueObject\Storage;
use Rector\Caching\Contract\ValueObject\Storage\CacheStorageInterface;
use Rector\Caching\ValueObject\CacheItem;
/**
* inspired by https://github.com/phpstan/phpstan-src/blob/560652088406d7461c2c4ad4897784e33f8ab312/src/Cache/MemoryCacheStorage.php
*/
final class MemoryCacheStorage implements CacheStorageInterface
{
/**
* @var array<string, CacheItem>
*/
private $storage = [];
/**
* @return null|mixed
*/
public function load(string $key, string $variableKey)
{
if (!isset($this->storage[$key])) {
return null;
}
$item = $this->storage[$key];
if (!$item->isVariableKeyValid($variableKey)) {
return null;
}
return $item->getData();
}
/**
* @param mixed $data
*/
public function save(string $key, string $variableKey, $data) : void
{
$this->storage[$key] = new CacheItem($variableKey, $data);
}
public function clean(string $key) : void
{
if (!isset($this->storage[$key])) {
return;
}
unset($this->storage[$key]);
}
public function clear() : void
{
$this->storage = [];
}
}