🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
Deadline — fechas límite
Propósito
Un par «reloj + momento de expiración»: isExpired(), remaining(): TimeSpan, prórroga con extendedBy(). Inmutable.
Para qué y cómo usarlo
Tiempos de espera de operaciones, vigencia de tokens, SLA: Deadline::after($clock, TimeSpan::ofSeconds(30)); en las pruebas es determinista mediante MockClock.
Ejemplo
$deadline = Deadline::after($clock, TimeSpan::ofSeconds(30));
while (!$deadline->isExpired()) {
$left = $deadline->remaining(); // TimeSpan
// ... time-bounded work ...
}
$prolonged = $deadline->extendedBy(10.0);
Antipatrones
No compares los momentos de expiración manualmente — isExpired() encapsula el límite (el propio momento de expiración ya está «expirado»).
Ciclo de vida
stateDiagram-v2
[*] --> Active: after(clock, span) / until(clock, moment)
Active --> Active: remaining() > 0
Active --> Expired: clock reaches expiresAt
Expired --> Active: extendedBy(span)
Expired --> [*]
Comparación de la característica con alternativas
| Aspecto | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| Fecha límite ligada al reloj | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Tiempo restante como TimeSpan | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Prórroga inmutable | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Determinismo en las pruebas | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Total | 🏆 4 | 0 | 0 | 0 | 0 | 0 |
← Volver a la lista de características
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano