🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
PsrClockAdapter — адаптер PSR-20 часов
Назначение
Оборачивает любые Psr\Clock\ClockInterface в расширенный контракт пакета: добавляет timestamp(), microtime(), timezone(), freeze(), withTimezone().
Для чего и как применять
Плавная миграция: часы из другой библиотеки (symfony, lcobucci...) работают во всех API пакета: PsrClockAdapter::wrap($foreign). Принимается и легаси-объект без PSR-20 с публичным now(), возвращающим любой DateTimeInterface.
Пример
$foreign = new \Symfony\Component\Clock\NativeClock();
$clock = PsrClockAdapter::wrap($foreign);
$clock->timestamp(); // работает поверх любых PSR-20 часов
Анти-паттерны
Дешёвые примитивы адаптера честно материализуют момент внутренних часов — родной SystemClock быстрее.
Жизненный цикл
flowchart LR
A[Any PSR-20 clock] --> B[PsrClockAdapter]
B --> C[Extended ClockInterface]
C --> D[TimeSpan / Deadline / decorators]
Сравнение возможности с аналогами
| Аспект | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| Адаптация произвольных PSR-20 часов | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ |
| Расширенный контракт поверх PSR | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Совместимость с декораторами пакета | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Снимок freeze() чужих часов | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Обёртка любого объекта с публичным now() (легаси) | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ |
| Всего | 🏆 5 | 1 | 0 | 0 | 2 | 0 |
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano