*/ protected array $items = []; protected function read(string $key): ?string { $item = $this->items[$key] ?? null; if ($item === null) { return null; } if ($item['expiresAt'] !== null && $item['expiresAt'] <= $this->currentTime()) { unset($this->items[$key]); return null; } return $item['value']; } protected function write(string $key, string $value, int $seconds): bool { $this->items[$key] = [ 'value' => $value, 'expiresAt' => $this->currentTime() + $seconds, ]; return true; } protected function delete(string $key): bool { $existed = $this->read($key) !== null; unset($this->items[$key]); return $existed; } protected function incrementBy(string $key, int $value): int { $current = $this->read($key); $next = (int) ($current ?? 0) + $value; $this->items[$key] = [ 'value' => (string) $next, 'expiresAt' => $current === null ? null : $this->items[$key]['expiresAt'], ]; return $next; } }