Skip to content

Feature Psr adapter

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

🔌 Адаптер PSR-20 — PsrClockAdapter

← Возможности · Главная · Сравнение

Любые сторонние PSR-20-часы получают расширенный контракт пакета: timestamp(), microtime(), timezone(), withTimezone(), freeze() — и совместимость со всеми декораторами. Аналог WrappingClock из beste/clock.

Принцип работы

use CloudCastle\Clock\OffsetClock;
use CloudCastle\Clock\PsrClockAdapter;

$foreign = new \Lcobucci\Clock\SystemClock(new DateTimeZone('UTC')); // чужие часы

$clock = PsrClockAdapter::wrap($foreign);

$clock->timestamp();                    // расширенный контракт у чужих часов
$clock->withTimezone('Europe/Moscow');  // зона выдачи — поверх источника
$clock->freeze()->advance(60.0);        // снимок чужого времени — управляемый

new OffsetClock($clock, 86_400.0);      // чужие часы в наших декораторах

Схема фичи

flowchart LR
    EXT["Сторонний Psr\\Clock\\ClockInterface"] --> AD[PsrClockAdapter]
    AD --> C1["timestamp()/microtime()"]
    AD --> C2["withTimezone()"]
    AD --> C3["freeze()"]
    AD --> DEC[Декораторы пакета]
Loading

Жизненный цикл

sequenceDiagram
    participant U as Код
    participant A as PsrClockAdapter
    participant F as Чужие часы

    U->>A: wrap(foreign)
    U->>A: timestamp()
    A->>F: now()
    F-->>A: DateTimeImmutable
    A-->>U: int (unix-время)
Loading

Плюсы

  • Мост между экосистемами: код на нашем контракте принимает часы из любого пакета.
  • Декораторы (смещение, масштаб, усечение) работают поверх чужих реализаций.

Минусы

  • timestamp()/microtime() адаптера создают объект момента источника — быстрее нативных наших часов не станет.

✅ Рекомендуется

  • Постепенная миграция проекта с другого clock-пакета без переписывания потребителей.

❌ Антипаттерны

  • Оборачивать наши же часы — у них расширенный контракт уже есть.

Сравнение с аналогами

Возможность Clock symfony/clock lcobucci/clock beste/clock nesbot/carbon ergebnis/clock 🏆 Победитель
Адаптер стороннего PSR-20 Clock + beste/clock
Расширенный контракт поверх чужих часов Clock
Зона выдачи поверх источника Clock

Clone this wiki locally