CloudCastle Clock

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

ClockHolder — horloge globale avec substitution à portée limitée

Objectif

Un emplacement global pour l’horloge applicative : set()/get()/reset() et within($clock, $fn) — substitution temporaire avec restauration garantie, même en cas d’exception.

À quoi ça sert et comment l’utiliser

Un pont pour le code sans injection de dépendances et pour DatePoint ; dans les tests, within() isole la substitution des tests voisins.

Exemple

$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-modèles

L’état global est un compromis assumé : dans les nouveaux services, injectez ClockInterface directement.

Cycle de vie

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)

Comparaison de la fonctionnalité avec les concurrents

Aspect🏆 CloudCastlesymfonycarbonlcobuccibesteergebnis
Substitution à portée limitée avec restauration automatique✅❌✅❌❌❌
Restauration en cas d’exception✅❌✅❌❌❌
Horloge système par défaut si non définie✅✅✅❌❌❌
isSet()/reset() explicites✅❌❌❌❌❌
Total🏆 413000

← Retour à la liste des fonctionnalités


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