🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
ClockHolder — orologio globale con sostituzione a scope
Scopo
Slot globale dell'orologio dell'applicazione: set()/get()/reset() e within($clock, $fn) — sostituzione temporanea con ripristino garantito anche in caso di eccezione.
A cosa serve e come usarlo
Ponte per il codice senza DI e per DatePoint; nei test within() isola la sostituzione dai test vicini.
Esempio
$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-pattern
Lo stato globale è un compromesso consapevole: nei nuovi servizi inietta ClockInterface direttamente.
Ciclo di vita
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)
Confronto della funzionalità con gli analoghi
| Aspetto | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| Sostituzione a scope con ripristino automatico | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Ripristino in caso di eccezione | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ |
| Orologio di sistema come default se non impostato | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
isSet()/reset() espliciti | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Totale | 🏆 4 | 1 | 3 | 0 | 0 | 0 |
← Torna all'elenco delle funzionalità
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano