доступен!
PHP 8.0 — большое обновление языка PHP.
Оно содержит множество новых возможностей и оптимизаций, включая именованные аргументы, union type, атрибуты, упрощённое определение свойств в конструкторе, выражение match, оператор nullsafe, JIT и улучшения в системе типов, обработке ошибок и консистентности.

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

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

Атрибуты RFC Документация

PHP 7
PHP 8

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

Объявление свойств в конструкторе RFC Документация

PHP 7
x = $x; $this->y = $y; $this->z = $z; } }', );?>
PHP 8

Меньше шаблонного кода для определения и инициализации свойств.

Тип Union RFC Документация

PHP 7
number = $number; } } new Number(\'NaN\'); // Нет ошибки', );?>
PHP 8

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

Выражение Match RFC Документация

PHP 7
О нет!', );?>
PHP 8
"О нет!", 8.0 => "То, что я и ожидал", }; //> То, что я и ожидал', );?>

Новое выражение match похоже на оператор switch со следующими особенностями:

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

Оператор Nullsafe RFC

PHP 7
user; if ($user !== null) { $address = $user->getAddress(); if ($address !== null) { $country = $address->country; } } }', );?>
PHP 8
user?->getAddress()?->country;', );?>

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

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

PHP 7
PHP 8

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

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

PHP 7
PHP 8

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

Компиляция Just-In-Time

PHP 8 представляет два механизма JIT-компиляции. Трассировка JIT, наиболее перспективная из них, на синтетических бенчмарках показывает улучшение производительности примерно в 3 раза и в 1,5–2 раза на некоторых долго работающих приложениях. Стандартная производительность приложения находится на одном уровне с PHP 7.4.

Относительный вклад JIT в производительность PHP 8

Компиляция Just-In-Time

Улучшения в системе типов и обработке ошибок

  • Более строгие проверки типов для арифметических/побитовых операторов RFC
  • Проверка методов абстрактных трейтов RFC
  • Правильные сигнатуры магических методов RFC
  • Реклассификация предупреждений движка RFC
  • Фатальная ошибка при несовместимости сигнатур методов RFC
  • Оператор @ больше не подавляет фатальные ошибки.
  • Наследование с private методами RFC
  • Новый тип mixed RFC
  • Возвращаемый тип static RFC
  • Типы для стандартных функций E-mail Тема
  • Непрозрачные объекты вместо ресурсов для Curl, Gd, Sockets, OpenSSL, XMLWriter, e XML расширения

Прочие улучшения синтаксиса

  • Разрешена запятая в конце списка параметров RFC и в списке use замыканий RFC
  • Блок catch без указания переменной RFC
  • Изменения синтаксиса переменных RFC
  • Имена в пространстве имен рассматриваются как единый токен RFC
  • Выражение Throw RFC
  • Добавление ::class для объектов RFC

Новые классы, интерфейсы и функции