🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
Deadline — дедлайны
Назначение
Пара «часы + момент истечения»: isExpired(), remaining(): TimeSpan, продление extendedBy(). Иммутабелен.
Для чего и как применять
Тайм-ауты операций, сроки действия токенов, SLA: Deadline::after($clock, TimeSpan::ofSeconds(30)); в тестах детерминирован через MockClock.
Пример
$deadline = Deadline::after($clock, TimeSpan::ofSeconds(30));
while (!$deadline->isExpired()) {
$left = $deadline->remaining(); // TimeSpan
// ... работа с контролем времени ...
}
$prolonged = $deadline->extendedBy(10.0);
Анти-паттерны
Не сравнивайте моменты istечения вручную — isExpired() инкапсулирует границу (момент истечения уже «истёк»).
Жизненный цикл
stateDiagram-v2
[*] --> Active: after(clock, span) / until(clock, moment)
Active --> Active: remaining() > 0
Active --> Expired: clock reaches expiresAt
Expired --> Active: extendedBy(span)
Expired --> [*]
Сравнение возможности с аналогами
| Аспект | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| Дедлайн, привязанный к часам | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Остаток как TimeSpan | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Иммутабельное продление | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Детерминизм в тестах | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Всего | 🏆 4 | 0 | 0 | 0 | 0 | 0 |
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano