Skip to content

Features

github-actions[bot] edited this page Jul 14, 2026 · 1 revision

🧩 Возможности

Главная · Сравнение с аналогами · Архитектура

Каждая возможность пакета описана на отдельной странице: принцип работы, примеры, плюсы/минусы, рекомендации и сравнение с аналогами по этой конкретной фиче.

Реализации часов

Фича Класс Одной строкой
Системные часы SystemClock Продакшн-время: системная зона, UTC или любая другая
Замороженные часы FrozenClock Время стоит — детерминированные тесты
Тестовые часы MockClock Виртуальный sleep() без блокировки процесса
Монотонные часы MonotonicClock Иммунитет к переводу системного времени
Часы на callback CallbackClock Произвольный источник времени из замыкания

Декораторы

Фича Класс Одной строкой
Смещение времени OffsetClock «Завтра» и «вчера» поверх любых часов
Масштаб времени ScaledClock Время течёт в N раз быстрее или медленнее
Усечение моментов TruncatingClock Округление вниз до секунды/минуты/часа/суток

Интеграция в приложение

Фича Класс Одной строкой
Глобальный слот и фасад ClockHolder, Clock Одна точка подмены времени во всём приложении
Трейт внедрения ClockAwareTrait Часы в сервисе: DI-инъекция с фолбэком на слот
Секундомер Stopwatch Замеры длительностей на монотонном таймере
DatePoint DatePoint Момент от часов приложения, исключения вместо false
Адаптер PSR-20 PsrClockAdapter Чужие часы получают весь расширенный контракт

Сквозные свойства

  • freeze() у всех часов — снимок момента любых часов (в т.ч. декорированных и сторонних через адаптер) в управляемый FrozenClock.
  • PSR-20 везде: каждая реализация подставляется в любой код, ожидающий Psr\Clock\ClockInterface.
  • Расширенный контракт: timestamp() и microtime() отдают время без создания объектов дат — дёшево для горячих путей.
  • withTimezone() у всех часов — копия в другой таймзоне; декораторы при этом сохраняют связь с живыми внутренними часами.
  • Валидация на границе: мусорные строки дат/зон/модификаторов и null-байты отклоняются типизированным InvalidClockValueException; управляющие символы в сообщениях ошибок экранируются.

Clone this wiki locally