Типизированные константы классов в PHP 8.3

Начиная с версии PHP 8.3 мы можем указывать типы для констант классов, что делает наши приложения менее подверженными неожиданным ошибкам. Вцелом это продолжение пути для использования возможностей строгой типизации.

 Мы можем указывать типы констант в:

  • классах,
  • интерфейсах,
  • трейтах,
  • ​​перечислениях.

Добавление новой возможности позволяет избегать переопределения типов объявленных констант в наследниках. Например вот так:

// до версии PHP 8.3 код ниже работает
interface I {
    const PHP = 'PHP 8.2';
}

class Foo implements I {
    // здесь происходит переопределения значения и типа, и это не вызовет ошибки.
    const PHP = [];
}

Начиная же с версии  PHP 8.3 такое поведение будет вызывать фатал:

// с версии PHP 8.3+ скрипт завершится с ошибкой
interface I {
    const string PHP = 'PHP 8.3';
}

class Foo implements I {
    // Получим Fatal error: Cannot use array as value for class constant Foo::PHP of type string
    const string PHP = [];
}

Константам классов можно указывать любые скалярные типы кроме void.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *