> 🌊 Продуктивной середины недели!
Сегодня хочу напомнить, что в PHP 8.1 появился отменный инструмент для строгой типизации значений — Enum! Вот уже почти пять лет он радует разработчиков своей полезностью и наводит ужОс на начинающих. (:
Зачем нам Enum?
Enum нужны для безопасности типов при перечислении. Раньше делали константы вроде `STATUS_ACTIVE`, `STATUS_PENDING`, `STATUS_DRAFT` или просто строки в классе. И всё это было ужасно больно, ведь: - Можно было ошибиться в написании: 'actve' вместо 'active' - Можно было передать вообще непонятно что: 'hello_world' вместо статуса - Можно было запутаться — этот статус для Товара или для Категории? - Что будет, когда поменяешь значение константы?
В легаси-проектах такое состояние — как просроченная молочка с солёными огурцами: результат заведомо известен, а когда "выстрелит" — не знаешь. (:
Как это работает рассмотрим быстро на примере заказа
Было: метод `setStatus(string $status)` принимал любую строку. Можно было передать 'paid', а можно 'payd' — и ошибка нашлась бы только в проде.
Стало: метод `setStatus(OrderStatus $status)` принимает только объект Enum. Передать случайную строку уже не получится — код просто не скомпилируется.
Создаётся Enum `OrderStatus` с вариантами: `NEW`, `PAID`, `SHIPPED`.
Использование выглядит как `OrderStatus::PAID` — безопасно, предсказуемо, с подсказками от IDE.
Где ещё пригодятся Enum?
- Типы пользователей: `ADMIN`, `MANAGER`, `CLIENT` - Способы оплаты: `CARD`, `CASH`, `CRYPTO` - Статусы заказа: `NEW`, `PROCESSING`, `COMPLETED`, `CANCELLED`
Можно даже добавить методы внутрь Enum: например, метод `isEditable()` проверяет, можно ли редактировать заказ в текущем статусе.
А ещё бонусом получаем полезные методы: - `OrderStatus::cases()` — получить все доступные варианты - `OrderStatus::PAID->value` — получить строковое значение (для string-backed Enum) - `OrderStatus::from('paid')` — получить Enum из строки с проверкой - `OrderStatus::tryFrom('unknown')` — получить Enum или `null`, если значение невалидно
В чем главное преимущество?
Enum дают типобезопасность и самодокументируемость. IDE подскажет все доступные варианты, нельзя передать левое значение, код становится предсказуемым, а рефакторинг — безопасным.
Всегда радуюсь, когда вижу Enum в свежих проектах. Это как хороший инструмент в ящике — вроде бы мелочь, а жизнь упрощает кардинально!
Держите фокус и помните, что середина недели — лучшее время для рефакторинга и внедрения полезных фич!
#мотивациядлятебя #позитивдлятебя #рефакторинг #чистыйкод #типизация #php #enum
«Используете ли вы Enum в проектах? Или до сих пор сидите на константах? Может, были кейсы, где Enum реально спасли ситуацию? 👇»