Вышла в релиз восьмая версия языка программирования PHP. Главные особенности – поддержка JIT-компилятора, появление оператора безопасного null и возможность создавать аннотации в IDE.
Что меняется
Сообщество разработчиков PHP пояснило, что главной целью релиза была оптимизация скорости выполнения языка и добавление новых возможностей. Появилась поддержка дополнительных функций, а часть уже имеющихся были объявлены устаревшими. Поэтому при переходе на версию PHP 8.0 стоит помнить, что некоторые изменения нарушают обратную совместимость с предыдущими версиями языка.
Для упрощения миграции с PHP 7.4.x на официальном сайте php.net создан специальный раздел с документацией, описывающей нововведения и возможные последствия их использования в коде для более старых версий.
Главные особенности PHP 8.0
JIT-компилятор. Разработчики еще в седьмой версии PHP признавались, что выжали максимум возможной производительности. Чтобы еще больше ускорить язык, необходимо использовать JIT-компилятор. Его поддержка реализована в восьмом релизе. Больше всего применение JIT скажется на выполнении математических операций.
Появление аннотаций. Больше не нужно писать PHP-код для фреймворка Symphony на языке комментариев. В восьмой версии появилась возможность при помощи # создавать описания метаданных, проводить рефакторинг и использовать функцию Find usages.
Nullsafe-оператор. Если функция может вернуть null, перед ее использованием необходимо убедиться, что этого не произойдет. Когда таких функций очень много, писать проверку для каждой из них крайне утомительно. В PHP 8.0 синтаксис можно упростить, использовав nullsafe-оператор ?->. Если хотя бы один из элементов последовательного вызова функций возвратит значение null, выполнение прервется, и вся цепочка вернет null.
Новый оператор выбора. Для выбора поведения кода из нескольких вариантов в зависимости от значения переменной традиционно используется оператор switch. Теперь вместо него можно применять выражение match, которое позволяет сократить запись. Но оно не полностью заменяет switch и имеет несколько отличий:
- Match является выражением, поэтому его результат может быть сохранен в переменной или возвращен.
- Условия match поддерживают только однострочные выражения, для которых не требуется управляющая конструкция break.
- Выражение match использует строгое сравнение.
Улучшение приведения строки к числу. При нестрогом сравнении строковых и числовых данных старые версии PHP всегда преобразовывают строку к числу. В восьмой версии языка строки и числа будут сравниваться как числа только в том случае, если строка представляет собой число (например, "42"). В противном случае число будет преобразовано в строку. Это одно из изменений, нарушающих обратную совместимость языка. К примеру, иногда для проверки пустой строки "" использовалось ее сравнение с 0. Теперь выражение 0 == "" даст false.