-
Notifications
You must be signed in to change notification settings - Fork 0
Feature Psr adapter
github-actions[bot] edited this page Jul 14, 2026
·
1 revision
Любые сторонние 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[Декораторы пакета]
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-время)
- Мост между экосистемами: код на нашем контракте принимает часы из любого пакета.
- Декораторы (смещение, масштаб, усечение) работают поверх чужих реализаций.
-
timestamp()/microtime()адаптера создают объект момента источника — быстрее нативных наших часов не станет.
- Постепенная миграция проекта с другого clock-пакета без переписывания потребителей.
- Оборачивать наши же часы — у них расширенный контракт уже есть.
| Возможность | Clock | symfony/clock | lcobucci/clock | beste/clock | nesbot/carbon | ergebnis/clock | 🏆 Победитель |
|---|---|---|---|---|---|---|---|
| Адаптер стороннего PSR-20 | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | Clock + beste/clock |
| Расширенный контракт поверх чужих часов | ✅ | — | — | ❌ | — | — | Clock |
| Зона выдачи поверх источника | ✅ | — | — | ❌ | — | — | Clock |
CloudCastle Clock · · PHP 8.1+
GitHub · Packagist · Releases · Discussions · Issues
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)