CloudCastle Clock

🇷🇺 Русский · 🇬🇧 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🏆 CloudCastlesymfonycarbonlcobuccibesteergebnis
Sostituzione a scope con ripristino automatico✅❌✅❌❌❌
Ripristino in caso di eccezione✅❌✅❌❌❌
Orologio di sistema come default se non impostato✅✅✅❌❌❌
isSet()/reset() espliciti✅❌❌❌❌❌
Totale🏆 413000

← Torna all'elenco delle funzionalità


🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano