10 лет мы использовали геттеры и сеттеры в виде методов, мирясь с ограничениями автодополнения в IDE. С выходом PHP 8.4 и Laravel 12 появился более элегантный и строгий способ — хуки свойств (Property Hooks).
Теперь логику можно описывать прямо в теле свойства:
public string $fullName {
get => "{$this->first_name} {$this->last_name}";
set(string $value) => [
$this->first_name,
$this->last_name
] = explode(' ', $value, 2);
}Ключевые преимущества
✅ Встроенная типизация. Явное указание типа `string` гарантирует безопасность на уровне языка. Больше не нужны `@property`-аннотации для подсказок IDE.
✅ Идеальное автодополнение. Свойства «видны» с первого обращения, IDE понимает их структуру без дополнительных плагинов.
✅ Чистота моделей. Код становится декларативным и компактным, логика сосредоточена в одном месте.
✅ Прозрачность. Меньше «магии» фреймворка — проще читать и отлаживать.
Идеальные сценарии для использования
✅ Виртуальные (вычисляемые) атрибуты: `full_name`, `formatted_price`, `is_published`.
✅ Мгновенная нормализация данных: приведение к нижнему регистру, триммирование пробелов при записи.
✅ Простые вычисления без кэширования: когда нет необходимости хранить результат в БД.
⚠️ Важно: Класс `Attribute` и метод `Attribute::make()` остаются для сложных сценариев с кэшированием, зависимостями и т.п. Но для большинства простых преобразований хуки свойств — более прямой и производительный выбор.
Итог
2026 год на дворе. Пора писать модели на современном PHP, используя его синтаксис, а не обходные пути ранних версий Laravel.
📱 @dev_notes_ru
#PHP #Laravel #PropertyHooks