🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
ClockAwareTrait — inyección del reloj mediante setter
Propósito
Un trait para servicios: setClock() + now() protegido; sin configurarlo — el reloj global. Paridad con el ClockAwareTrait de symfony, pero sin contenedor obligatorio.
Para qué y cómo usarlo
Incorporación ligera de tiempo controlado en clases existentes: mezcla el trait y, en las pruebas, setClock(new MockClock(...)).
Ejemplo
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'));
Antipatrones
Para servicios nuevos, la inyección de ClockInterface por constructor es más transparente que un setter.
Ciclo de vida
flowchart LR
A[Service + ClockAwareTrait] -->|now()| B{clock set?}
B -->|yes| C[Injected clock]
B -->|no| D[ClockHolder global]
Comparación de la característica con alternativas
| Aspecto | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| Inyección del reloj por setter | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Respaldo en el reloj global | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Sin contenedor obligatorio | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
now() protegido para herederos | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Total | 🏆 4 | 3 | 0 | 0 | 0 | 0 |
← Volver a la lista de características
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano