🇷🇺 Русский · 🇬🇧 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 | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| 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 | 🏆 4 | 1 | 3 | 0 | 0 | 0 |
← Volver a la lista de características
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano