🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
ClockAwareTrait — iniezione dell'orologio tramite setter
Scopo
Trait per i servizi: setClock() + now() protetto; senza impostazione — l'orologio globale. Alla pari con il ClockAwareTrait di symfony, ma senza container obbligatorio.
A cosa serve e come usarlo
Introduzione leggera del tempo controllato in classi esistenti: si aggiunge il trait, nei test setClock(new MockClock(...)).
Esempio
final class ReportService
{
use ClockAwareTrait;
public function build(): Report
{
return new Report(generatedAt: $this->now());
}
}
// In a test:
$service->setClock(FrozenClock::from('2026-01-01', 'UTC'));
Anti-pattern
Per i nuovi servizi l'iniezione tramite costruttore di ClockInterface è più trasparente di un setter.
Ciclo di vita
flowchart LR
A[Service + ClockAwareTrait] -->|now()| B{clock set?}
B -->|yes| C[Injected clock]
B -->|no| D[ClockHolder global]
Confronto della funzionalità con gli analoghi
| Aspetto | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| Iniezione dell'orologio tramite setter | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Fallback all'orologio globale | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Senza container obbligatorio | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
now() protetto per le sottoclassi | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Totale | 🏆 4 | 3 | 0 | 0 | 0 | 0 |
← Torna all'elenco delle funzionalità
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano