🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
ClockHolder — horloge globale avec substitution à portée limitée
Objectif
Un emplacement global pour l’horloge applicative : set()/get()/reset() et within($clock, $fn) — substitution temporaire avec restauration garantie, même en cas d’exception.
À quoi ça sert et comment l’utiliser
Un pont pour le code sans injection de dépendances et pour DatePoint ; dans les tests, within() isole la substitution des tests voisins.
Exemple
$result = ClockHolder::within(
MockClock::from('2026-01-01 00:00:00', 'UTC'),
fn () => $service->generateReport(), // inside, “now” is 2026-01-01
);
// the global clock is restored automatically
Anti-modèles
L’état global est un compromis assumé : dans les nouveaux services, injectez ClockInterface directement.
Cycle de vie
sequenceDiagram
participant T as Caller
participant H as ClockHolder
T->>H: within(mock, fn)
H->>H: save previous, set mock
H->>T: fn() result
H->>H: restore previous (finally)
Comparaison de la fonctionnalité avec les concurrents
| Aspect | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| Substitution à portée limitée avec restauration automatique | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Restauration en cas d’exception | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Horloge système par défaut si non définie | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
isSet()/reset() explicites | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Total | 🏆 4 | 1 | 3 | 0 | 0 | 0 |
← Retour à la liste des fonctionnalités
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano