🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
Deadline — Fristen
Zweck
Ein Paar „Uhr + Ablaufzeitpunkt“: isExpired(), remaining(): TimeSpan, Verlängerung mit extendedBy(). Immutabel.
Wofür und wie zu verwenden
Operations-Timeouts, Gültigkeitsdauer von Token, SLAs: Deadline::after($clock, TimeSpan::ofSeconds(30)); in Tests deterministisch über MockClock.
Beispiel
$deadline = Deadline::after($clock, TimeSpan::ofSeconds(30));
while (!$deadline->isExpired()) {
$left = $deadline->remaining(); // TimeSpan
// ... time-bounded work ...
}
$prolonged = $deadline->extendedBy(10.0);
Anti-Patterns
Vergleichen Sie Ablaufzeitpunkte nicht manuell — isExpired() kapselt die Grenze (der Ablaufzeitpunkt selbst gilt bereits als „abgelaufen“).
Lebenszyklus
stateDiagram-v2
[*] --> Active: after(clock, span) / until(clock, moment)
Active --> Active: remaining() > 0
Active --> Expired: clock reaches expiresAt
Expired --> Active: extendedBy(span)
Expired --> [*]
Funktionsvergleich mit Konkurrenten
| Aspekt | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| An die Uhr gebundene Frist | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Verbleibende Zeit als TimeSpan | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Immutable Verlängerung | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Determinismus in Tests | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Gesamt | 🏆 4 | 0 | 0 | 0 | 0 | 0 |
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano