/
githubmirror
/
symfony
Обзор
Документация
Войти
/
githubmirror
/
symfony
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
8.2
src/Symfony/Component/Lock/Key.php
115 строк
3 KB
Nicolas Grekas
Merge branch '8.0' into 8.1
09 июн 2026, 13:54
09 июн 2026, 13:54
c7397a6
Код
Авторство
О чём код?
<?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Lock; use Symfony\Component\Lock\Exception\UnserializableKeyException; /** * Key is a container for the state of the locks in stores. * * @author Jérémy Derussé <jeremy@derusse.com> */ final class Key implements \Stringable { private ?float $expiringTime = null; private array $state = []; private bool $serializable = true; public function __construct( private string $resource, ) { } public function __toString(): string { return $this->resource; } public function hasState(string $stateKey): bool { return isset($this->state[$stateKey]); } public function setState(string $stateKey, mixed $state): void { $this->state[$stateKey] = $state; } public function removeState(string $stateKey): void { unset($this->state[$stateKey]); } public function getState(string $stateKey): mixed { return $this->state[$stateKey]; } public function markUnserializable(): void { $this->serializable = false; } public function resetLifetime(): void { $this->expiringTime = null; } /** * @param float $ttl the expiration delay of locks in seconds */ public function reduceLifetime(float $ttl): void { $newTime = microtime(true) + $ttl; if (null === $this->expiringTime || $this->expiringTime > $newTime) { $this->expiringTime = $newTime; } } /** * Returns the remaining lifetime in seconds. */ public function getRemainingLifetime(): ?float { return null === $this->expiringTime ? null : $this->expiringTime - microtime(true); } public function isExpired(): bool { return null !== $this->expiringTime && $this->expiringTime <= microtime(true); } public function __unserialize(array $data): void { if (($data['resource'] ?? $data["\0".self::class."\0resource"] ?? null) instanceof \Stringable) { throw new \BadMethodCallException('Cannot unserialize '.self::class); } $this->resource = $data['resource'] ?? $data["\0".self::class."\0resource"]; $this->expiringTime = $data['expiringTime'] ?? $data["\0".self::class."\0expiringTime"] ?? null; $this->state = $data['state'] ?? $data["\0".self::class."\0state"] ?? []; } public function __serialize(): array { if (!$this->serializable) { throw new UnserializableKeyException('The current lock store doesn\'t support serialization of Key objects.'); } return [ 'resource' => $this->resource, 'expiringTime' => $this->expiringTime, 'state' => $this->state, ]; } }