Система типов PHP 8
Вопрос
Как изменилась система типов PHP с версии 7.0 до 8.3 и как вы ей пользуетесь?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
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 ошибок.