PHP 8.3: Динамическое получение констант класса и Enum
PHP 8.3 и более поздние версии получат поддержку получение констант класса и элементов Enum через переменную с названием константы
Итак, PHP 8.3 позволит написать вот такой код:
До PHP 8.3 синтаксис доступа к константам класса ClassName::{$varName} был невозможен и приводил к синтаксической ошибке:
То же ограничение применялось и к Enum, где было невозможно получить динамически элемент Перечисления:
Единственным способом динамического доступа к константам класса и элементам Enum до PHP 8.3 была функция constant():
Теперь в PHP 8.3 код будет валиден и выполняться как ожидается.
Выражение внутри {} не ограничивается только полным именем переменной. Допускается любое выражение, возвращающее строковое значение:
Неопределенная константа и поведение Enum
Нет никаких изменений в поведении при попытке доступа к неопределенной константе класса или элементу Enum. Оба они приводят к ошибке неопределенной константы:
Магическая константа ::class
Магическая константа ::class, которая возвращает полное имя класса Class/Enum, также разрешены с новым синтаксисом:
Ошибки типа
Попытка получить константу класса или элемент Enum с выражением, возвращающим любой тип, кроме как string вызывает исключение TypeError:
Влияние обратной совместимости
До версии PHP 8.3 синтаксис ClassName::{$constantName} был запрещен и приводил к синтаксическим ошибкам. Приложения PHP, использующие этот синтаксис, не будут работать в старых версиях PHP.
Что думаешь?