Ответ вслух Middle Типы и строгая типизация обновлено

Система типов PHP 8

Вопрос

Как изменилась система типов PHP с версии 7.0 до 8.3 и как вы ей пользуетесь?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

В PHP 7 появились скалярные типы параметров и возвращаемых значений, nullable-типы ?int, void, а в 7.4 типизированные свойства. С этого момента на PHP можно писать почти полностью типизированный код.

Что должно прозвучать в ответе

  • 7.x: скалярные типы, возвращаемые типы, nullable, void, типизированные свойства в 7.4

  • 8.0: union types, mixed, static, конструктор с продвижением свойств

  • 8.1: enum, readonly-свойства, never, пересечения типов

  • 8.2: readonly-классы, DNF-типы, true, false и null как самостоятельные

  • 8.3: типизированные константы классов

  • PHPStan или Psalm для того, что рантайм не проверяет (дженерики в PHPDoc)

Что могут спросить следом

  • Чем readonly-свойство отличается от константы?
  • Зачем тип never?

Разбор

В PHP 7 появились скалярные типы параметров и возвращаемых значений, nullable-типы ?int, void, а в 7.4 типизированные свойства. С этого момента на PHP можно писать почти полностью типизированный код.

PHP 8.0 добавил объединения int|string, mixed, возвращаемый static и продвижение свойств в конструкторе. В 8.1 пришли перечисления enum, readonly-свойства, тип never для функций, которые не возвращают управление, и пересечения A&B. В 8.2 появились readonly-классы, DNF-типы вроде (A&B)|null и самостоятельные true, false, null, а в 8.3 типизированные константы классов.

В работе я включаю strict_types, типизирую всё, что можно, а дженерики описываю в PHPDoc для PHPStan, который гоняю в CI на высоком уровне. Рантайм ловит ошибки при выполнении, а анализатор до деплоя.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.