🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
SystemClock — Systemuhr
Zweck
Zeitquelle für die Produktion: liefert die reale Betriebssystemzeit in einer festen Zeitzone. Der heiße Pfad now() ist so günstig wie möglich; timestamp()/microtime() erzeugen überhaupt keine Objekte.
Wofür und wie einzusetzen
Injizieren Sie sie über ClockInterface in jeden Dienst, der „jetzt" benötigt: Protokollierung, TTLs, Zeitpläne. Fabriken: SystemClock::utc() (zwischengespeichert), SystemClock::system(), SystemClock::fromTimezone($tz).
Beispiel
$clock = SystemClock::utc();
$moment = $clock->now(); // DateTimeImmutable in UTC
$unix = $clock->timestamp(); // int, no date object
$fine = $clock->microtime(); // float with microseconds
Anti-Patterns
Rufen Sie sie nicht statisch tief in der Geschäftslogik auf — übergeben Sie das Interface, sonst können Tests die Zeit nicht ersetzen.
Lebenszyklus
stateDiagram-v2
[*] --> Created: utc()/system()/fromTimezone()
Created --> Reading: now()/timestamp()/microtime()
Reading --> Reading: repeat
Created --> Frozen: freeze()
Frozen --> [*]
Funktionsvergleich mit Konkurrenten
| Aspekt | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| Feste explizite Zeitzone | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
| Zwischengespeicherte UTC-Instanz | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ |
| Zeitstempel ohne Datumsobjekt | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Echtes sleep()/sleepUntil() | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Gesamt | 🏆 4 | 2 | 1 | 1 | 1 | 1 |
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano