🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
ClockHolder — globale Uhr mit bereichsbezogener Ersetzung
Zweck
Ein globaler Slot für die Anwendungsuhr: set()/get()/reset() und within($clock, $fn) — eine temporäre Ersetzung mit garantierter Wiederherstellung selbst bei Ausnahmen.
Wofür und wie einzusetzen
Eine Brücke für Code ohne DI und für DatePoint; in Tests isoliert within() die Ersetzung von benachbarten Tests.
Beispiel
$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-Muster
Globaler Zustand ist ein bewusster Kompromiss: In neuen Services die ClockInterface direkt injizieren.
Lebenszyklus
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)
Funktionsvergleich mit Alternativen
| Aspekt | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| Bereichsbezogene Ersetzung mit Auto-Wiederherstellung | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Wiederherstellung bei Ausnahme | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Systemuhr als Standard, wenn nicht gesetzt | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
Explizite isSet()/reset() | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Gesamt | 🏆 4 | 1 | 3 | 0 | 0 | 0 |
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano