🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
SystemClock — системные часы
Назначение
Продакшн-источник времени: отдаёт реальное время ОС в фиксированной таймзоне. Горячий путь now() максимально дёшев, timestamp()/microtime() не создают объектов вовсе.
Для чего и как применять
Внедряйте через ClockInterface во все сервисы, которым нужно «сейчас»: журналирование, TTL, расписания. Фабрики: SystemClock::utc() (кэшируется), SystemClock::system(), SystemClock::fromTimezone($tz).
Пример
$clock = SystemClock::utc();
$moment = $clock->now(); // DateTimeImmutable в UTC
$unix = $clock->timestamp(); // int, без объекта даты
$fine = $clock->microtime(); // float с микросекундами
Анти-паттерны
Не вызывайте статически в глубине бизнес-логики — прокидывайте интерфейс, иначе тесты не смогут подменить время.
Жизненный цикл
stateDiagram-v2
[*] --> Created: utc()/system()/fromTimezone()
Created --> Reading: now()/timestamp()/microtime()
Reading --> Reading: repeat
Created --> Frozen: freeze()
Frozen --> [*]
Сравнение возможности с аналогами
| Аспект | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| Фиксированная явная таймзона | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
| Кэш экземпляра UTC | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ |
| Метка времени без объекта даты | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Реальный sleep()/sleepUntil() | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
| Всего | 🏆 4 | 2 | 1 | 1 | 1 | 1 |
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano