Релиз PHP 8.0

После года разработки представлен релиз языка программирования PHP 8.0, сообщает OpenNet. Он включает серию новых возможностей и несколько изменений, нарушающих совместимость.

Релиз PHP 8.0

После года разработки представлен релиз языка программирования PHP 8.0, сообщает OpenNet. Он включает серию новых возможностей и несколько изменений, нарушающих совместимость.

Ключевые улучшения PHP 8.0:

  • Включение JIT-компилятора. PHP транслирует исходные тексты PHP-скриптов в промежуточное представление (байткод), которое затем выполняется в виртуальной машине Zend VM. JIT поможет дополнительно поднять производительность за счёт преобразования байткода в специфичный для аппаратной платформы машинный код, который может напрямую исполняться процессором, минуя интерпретатор байткода в Zend VM.
  • Поддержка именованных аргументов функций, позволяющих передавать в функцию значения в привязке к именам, т. е. можно передавать аргументы в произвольном порядке и определять необязательные аргументы.
  • При вызове методов разрешено применение оператора «?», который позволяет инициировать вызов, только если метод присутствует, что позволяет избежать лишних проверок на возврат значения null.
  • Поддержка union-типов, определяющих коллекции из двух и более типов.
  • Поддержка атрибутов (аннотаций), позволяющих привязать метаданные (например, сведения о типах) к классам без использования синтаксиса Docblock.
  • Поддержка выражений match, которые в отличие от switch могут возвращать значения, поддерживают комбинирование условий, используют строгое сравнение типов и не требуют указания break.
  • Сокращённый синтаксис определения классов, позволяющий объединить определение конструктора и свойств.
  • Новый тип возвращаемых значений static.
  • Новый тип mixed, который может применяться для определения приёма функцией параметров с разными типами.
  • Выражение throw для обработки исключений.
  • WeakMap для создания объектов, которыми можно пожертвовать при сборке мусора.
  • Возможность использования выражения :class для объектов (аналог вызова get_class ()).
  • Возможность определения в блоке catch исключений, не привязанных к переменным.
  • Возможность оставления символа запятой после последнего элемента в списке параметров функции.
  • Новый интерфейс Stringable для идентификации любых строковых типов или данных, которых можно преобразовать в строку (для которых доступен метод __toString ()).
  • Новая функция str_contains (), упрощённый аналог strpos для определения вхождения подстроки, а также функции str_starts_with () и str_ends_with () для проверки совпадений в начале и конце строки.
  • Добавлена функция fdiv (), выполняющая операцию деления без вывода ошибки в случае деления на ноль.
  • Изменена логика соединения строк. Например, выражение 'echo ''sum: ''. $a + $b' ранее интерпретировалось как 'echo (''sum: ''. $a) + $b', а в PHP 8 будет обработано как 'echo ''sum: ''. ($a + $b)'.
  • Ужесточена проверка арифметических и битовых операций, например, выражения «[] % [42]» и «$object + 4» будут приводить к ошибке.
  • Реализован стабильный алгоритм сортировки, в котором при разных запусках сохраняется порядок следования одинаковых значений.
  • Изменено поведение при сравнении строковых и числовых типов.
Собрали для вас скидки к Black Friday

Хотите сообщить важную новость?

Пишите в наш Телеграм