🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
Deadline — échéances
Objectif
Un couple « horloge + instant d’expiration » : isExpired(), remaining(): TimeSpan, prolongation via extendedBy(). Immuable.
À quoi ça sert et comment l’utiliser
Délais d’expiration d’opérations, durées de vie des jetons, SLA : Deadline::after($clock, TimeSpan::ofSeconds(30)) ; déterministe dans les tests via MockClock.
Exemple
$deadline = Deadline::after($clock, TimeSpan::ofSeconds(30));
while (!$deadline->isExpired()) {
$left = $deadline->remaining(); // TimeSpan
// ... time-bounded work ...
}
$prolonged = $deadline->extendedBy(10.0);
Anti-modèles
Ne comparez pas les instants d’expiration manuellement — isExpired() encapsule la limite (l’instant d’expiration lui-même est déjà « expiré »).
Cycle de vie
stateDiagram-v2
[*] --> Active: after(clock, span) / until(clock, moment)
Active --> Active: remaining() > 0
Active --> Expired: clock reaches expiresAt
Expired --> Active: extendedBy(span)
Expired --> [*]
Comparaison des fonctionnalités avec les concurrents
| Aspect | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| Échéance liée à une horloge | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Temps restant sous forme de TimeSpan | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Prolongation immuable | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Déterminisme dans les tests | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Total | 🏆 4 | 0 | 0 | 0 | 0 | 0 |
← Retour à la liste des fonctionnalités
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano