🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano
QueueClock — часы-очередь
Назначение
Выдаёт заранее заданные моменты по одному; исчерпание очереди — типизированное исключение: лишний вызов now() виден сразу.
Для чего и как применять
Точные сценарии: «первый вызов — 10:00, второй — 10:05». push() пополняет очередь, remaining()/isEmpty() — контроль.
Пример
$clock = QueueClock::from('2026-01-01 10:00:00', '2026-01-01 10:05:00');
$clock->now(); // 10:00:00
$clock->now(); // 10:05:00
$clock->now(); // InvalidClockValueException: очередь пуста
Анти-паттерны
Не для длинных циклов с неизвестным числом чтений — очередь конечна по построению.
Жизненный цикл
flowchart LR
A[m1, m2, m3] -->|now| B(m1)
B -->|now| C(m2)
C -->|now| D(m3)
D -->|now| E[/InvalidClockValueException/]
Сравнение возможности с аналогами
| Аспект | 🏆 CloudCastle | symfony | carbon | lcobucci | beste | ergebnis |
|---|---|---|---|---|---|---|
| Предзаданная последовательность моментов | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Исключение при исчерпании | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Пополнение push() на лету | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Чтение головы без потребления | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
| Всего | 🏆 4 | 0 | 0 | 0 | 0 | 0 |
🇷🇺 Русский · 🇬🇧 English · 🇩🇪 Deutsch · 🇫🇷 Français · 🇪🇸 Español · 🇮🇹 Italiano