extra_toc

PHP 8 стал еще более быстрым и надежным. По сравнению с версией PHP 7 появилось множество новых и полезных вещей, которые обязательно будут востребованы пользователями. Рассмотрим подробнее эти нововведения.

Типы Union 2.0 (Объединенные типы)

Существует множество случаев, когда использование типов объединения может быть полезным. Вместо аннотаций PHPDoc для объединенных типов теперь вы можете использовать объявления union type, которые проверяются сразу во время выполнения.

Union Types — это совокупность двух или более типов, которые указывают, что вы можете использовать любой из них.

JIT – компилятор

JIT (Just In Time — «в нужный момент») — это динамическая компиляция байт кода в машинный. JIT компилятор значительно улучшает производительность работы программ. Проверка на синтетических бенчмарках показывает улучшение производительности примерно в 3 раза и в 1,5–2 раза для некоторых долго работающих приложений. 

В JIT код переводится сначала в промежуточное представление и только потом в машинный код. То есть, выполняется непосредственно на процессоре, а не на виртуальной машине Zend VM.

JIT реализован как независимая часть OPcache. Его можно включать / отключать во время компиляции или выполнения скрипта.

Что нового в PHP 8, сравнение с PHP 7

Использование ::class для объектов

В PHP 8 теперь вы можете использовать ::class для объектов вместо того, чтобы использовать get_class() как раньше. Работает точно так же, как и get_class().

Атрибуты

В PHP 8 теперь вместо аннотаций PHPDoc вы можете использовать структурные метаданные с нативным синтаксисом PHP.

Выражение Match

В PHP 8 новое выражение match похоже на оператор switch, но имеет свои особенности:

  • Match — это выражение и его результат может быть сохранён в переменной или возвращён.
  • Условия match поддерживают только однострочные выражения, для которых не требуется управляющая конструкция break;
  • Выражение match использует строгое сравнение.

Оператор Nullsafe

В PHP 8 теперь вместо проверки на null вы можете использовать последовательность вызовов с новым оператором Nullsafe. Если один из элементов в последовательности возвращает null, то выполнение прерывается и вся последовательность возвращает null.

Улучшенное сравнение строк и чисел

Теперь при сравнении с числовой строкой PHP 8 использует сравнение чисел. В противном случае число преобразуется в строку и используется сравнение строк.

Ошибки согласованности типов для встроенных функций

В PHP 8 большинство внутренних функций теперь выбрасывают исключение Error, если при проверке параметра возникает ошибка.

Именованные аргументы

В PHP 8 теперь можно:

  • Указывать только необходимые параметры и пропускать необязательные.
  • Порядок аргументов не важен, аргументы самодокументируемы.

Объявление свойств в конструкторе

В новой версии PHP 8 теперь используется гораздо меньше шаблонного кода для определения и инициализации свойств.

Новый тип возврата static

Ранее в PHP уже были возвращаемые типы — self и parent, но static не был допустимым типом возврата для этого языка программирования. Теперь есть.

Throw-выражения

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

В новом PHP 8 теперь вы можете преобразовывать инструкцию throw в выражение.

Weak maps

Weak maps — это набор объектов, на которые в коде слабо ссылаются ключи, что может привести к их удалению сборщиками мусора. В PHP 8 добавлен класс WeakMaps для создания сохранения ссылки на объект. При этом она не препятствует удалению самого объекта.

Завершающая запятая в списках параметров

Ранее при вызове функции в списках параметров отсутствовала поддержка запятой. В PHP 8 теперь это разрешено.

Новый Stringable интерфейс

В PHP 8 теперь вы можете использовать интерфейс Stringable для аннотации типов или имплементации метода __toString (). И больше нет необходимости реализовывать его вручную.

Новые функции в PHP 8

  1. get_debug_type() — возвращает тип переменной. В отличии от gettype() возвращает более полезный вывод для массивов, строк, анонимных классов и объектов.
  1. str_starts_with() — проверяет, начинается ли строка с определенной строки. Возвращает TRUE / FALSE.
  1. str_ends_with() — проверяет, заканчивается ли строка с определенной строки. Возвращает TRUE / FALSE.
  1. str_contains() — проверяет, содержит ли строка другую строку.
  1. fdiv() — эта функция похожа на fmod() и intdiv(), что позволяет делить на 0. Но вместо ошибок получаем INF, -INF или NAN, в зависимости от случая.

6. get_resource_id() — ранее ресурсам присваивается идентификатор, но для этого необходимо было преобразование ресурса в int. В PHP 8 добавлена функция get_resource_id(), что делает эту операцию более очевидной и безопасной для типов.

К сожалению многие CMS пока не поддерживают PHP 8, в частности и 1С-Битрикс. В любом случае поддержка PHP 8 скоро появится на всех тарифах нашего хостинга.

Подробнее ознакомиться с нововведениями можно на официальной странице проекта.