Релиз 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
» будут приводить к ошибке. - Реализован стабильный алгоритм сортировки, в котором при разных запусках сохраняется порядок следования одинаковых значений.
- Изменено поведение при сравнении строковых и числовых типов.
Читать на dev.by