-
-
Notifications
You must be signed in to change notification settings - Fork 0
Feature Helpers
github-actions[bot] edited this page Jul 16, 2026
·
1 revision
CloudCastle\Support\Helpers — утилиты потока управления и работы со значениями:
«прошить» объект побочным действием, лениво развернуть значение, проверить пустоту,
повторить операцию с предикатом. Аналог глобальных функций illuminate/support
(tap/with/blank/filled/retry), но в виде статических методов без глобального
пространства имён.
-
tap($value, $callback)— выполняет побочное действие над значением и возвращает само значение (удобно для fluent-цепочек и отладки). -
with($value, ?$callback)— возвращает значение или результат его преобразования. -
value($mayBeClosure, ...$args)— если передано замыкание, вызывает его; иначе возвращает как есть. -
blank/filled— единая семантика «пустоты» для строк, массивов,null, чисел, объектов. -
retry($times, $callback, $sleepMs, $when)— повторяет операцию до успеха или исчерпания попыток; предикат$whenрешает, повторять ли при конкретной ошибке.
use CloudCastle\Support\Helpers;
// tap — побочное действие, возвращает исходный объект
$user = Helpers::tap($user, static fn ($u) => $u->markActive());
// with — ленивое преобразование
Helpers::with('value', static fn (string $v): string => strtoupper($v)); // 'VALUE'
// blank / filled — единая проверка пустоты
Helpers::blank(' '); // true
Helpers::blank(0); // false (число — «заполнено»)
Helpers::filled(['x']); // true
// retry — повтор с паузой и предикатом
$response = Helpers::retry(
times: 3,
callback: static fn (int $attempt): Response => $client->send($request),
sleepMs: 200,
when: static fn (Throwable $e): bool => $e instanceof NetworkException,
);- Единая, предсказуемая семантика пустоты (
blank/filled) для всех типов. -
retryс предикатом$when— точный контроль, какие ошибки повторять (идемпотентность для сетевых/временных сбоев). - Статические методы вместо глобальных функций — нет конфликтов имён.
- Не заменяет полноценный circuit breaker / backoff-стратегии —
retryдаёт фиксированную паузу между попытками.
- Повторять только идемпотентные операции; ограничивать
$whenконкретными восстановимыми ошибками. - Использовать
tapдля отладки цепочек без разрыва fluent-стиля.
-
retryдля неидемпотентных операций с деньгами без ключа идемпотентности — риск двойного списания. - Повторять любые исключения без
$when— можно зациклить на неустранимой ошибке.
flowchart TD
START["вызов callback(попытка)"] --> OK{"успех?"}
OK -->|да| RET["вернуть результат"]
OK -->|нет, исключение| LAST{"попытки исчерпаны или when()=false?"}
LAST -->|да| THROW["пробросить исключение"]
LAST -->|нет| SLEEP["пауза sleepMs"]
SLEEP --> START
| Возможность | Support | illuminate | symfony | nette | voku | doctrine | 🏆 Победитель |
|---|---|---|---|---|---|---|---|
tap / with / value
|
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | Support, illuminate |
blank / filled
|
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | Support, illuminate |
retry с предикатом ошибки |
✅ | ✅ | ❌ | ❌ | ❌ | ❌ | Support, illuminate |
CloudCastle Support · · PHP 8.1+
GitHub · Packagist · Releases · Discussions
Email · Telegram · VK · Сетка · 💜 Поддержать проект
Исходники Wiki — каталог wiki/ в репозитории (синхронизация через GitHub Actions)