CloudCastle Clock

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

ClockHolder — reloj global con sustitución con ámbito

Propósito

Un slot global del reloj de la aplicación: set()/get()/reset() y within($clock, $fn) — sustitución temporal con restauración garantizada incluso ante una excepción.

Para qué y cómo usarlo

Un puente para el código sin DI y para DatePoint; en las pruebas, within() aísla la sustitución de las pruebas vecinas.

Ejemplo

$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

Antipatrones

El estado global es un compromiso consciente: en los servicios nuevos inyecta ClockInterface directamente.

Ciclo de vida

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)

Comparación de la característica con alternativas

Aspecto🏆 CloudCastlesymfonycarbonlcobuccibesteergebnis
Sustitución con ámbito y restauración automática✅❌✅❌❌❌
Restauración ante una excepción✅❌✅❌❌❌
Valor por defecto sin configurar — el reloj del sistema✅✅✅❌❌❌
isSet()/reset() explícitos✅❌❌❌❌❌
Total🏆 413000

← Volver a la lista de características


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