В PHP 8.4 появилась долгожданная возможность — хуки свойств.
Это встроенная логика чтения и записи значения прямо в объявлении свойства. Без отдельных методов, без шаблонных
getSomething() и setSomething().Код становится компактнее, выразительнее и проще для сопровождения.
🤔 В чём была проблема раньше
До этого у разработчиков было всего два варианта:
🧱 классический подход с приватными полями и методами доступа;
⚙️ promoted-properties из конструктора — удобно, но без логики.
Минус был общий:
❌ негде аккуратно разместить валидацию;
❌ сложно добавить логирование изменений;
❌ неудобно реализовать ленивые вычисления;
❌ класс быстро разрастался вспомогательными методами.
✨ Что изменилось с хуками
Теперь PHP позволяет перехватывать:
👀 момент чтения свойства;
✍️ момент записи значения.
При этом:
📌 снаружи используется привычный доступ к свойству;
🧠 внутри — чётко определённое место для логики;
🧩 в одном классе можно сочетать обычные свойства и свойства с хуками.
🧮 Виртуальные свойства
PHP 8.4 позволяет создавать свойства без собственного хранилища.
Такие свойства:
🪄 не занимают память;
🔄 вычисляются при каждом обращении;
🧩 выступают как интерфейс к другим данным объекта.
Полезно для:
объединённых представлений данных;
вычисляемых значений;
упрощения публичного API модели.
🧬 Наследование и контроль поведения
Хуки полностью поддерживают наследование:
🔁 поведение можно расширять или переопределять;
🔒 отдельные хуки можно пометить как
final;🧱 контроль инвариантов остаётся на стороне базового класса.
По возможностям это сопоставимо с методами, но на уровне свойств.
⚠️ Важные ограничения
Есть особенности, которые важно учитывать:
🚫 хуки несовместимы с
readonly-свойствами;🔗 изменение по ссылке может обойти логику записи;
🧪 не все внутренние функции PHP вызывают хуки одинаково.
Это не ошибки, а архитектурные компромиссы.
🔗 Хабр
Библиотека пхпшника