PHP 8.0 поставляется с типами объединений, JIT-компиляцией
PHP 8.0, крупное обновление популярного динамического языка для веб-программирования на стороне сервера, теперь доступен в качестве рабочей версии, в которой представлены типы объединений, именованные аргументы, атрибуты и компиляция точно в срок.
Типы объединения принимают значения нескольких различных типов. Они позволяют передавать аргументы функции на основе имени параметра, а не позиции параметра. Это делает значение аргумента самодокументируемым, делает аргументы независимыми от порядка и позволяет произвольно пропускать значения по умолчанию.
В то время как PHP уже поддерживал два специальных типа объединения (Тип или Null и массив или Traversable), произвольные типы объединения не поддерживались языком, который вместо этого использовал аннотации phpdoc. После универсальных типов типы объединения считались самой большой “дырой” в системе объявления типов PHP.
Поддержка типов объединения позволяет перемещать больше информации о типах из phpdoc в сигнатуры функций, при этом такие преимущества, как принудительное применение типов и меньшая вероятность устаревания информации о типах или пропуска крайних случаев. Кроме того, типы проверяются во время наследования и доступны через отражение. Синтаксис также менее шаблонен, чем в phpdoc.
Другие ключевые возможности в PHP 8.0:
- Включены два механизма компиляции JIT: трассировка JIT и функция JIT. Трассировка JIT показывает примерно в 3 раза лучшую производительность на синтетических тестах и в 1,5-2 раза лучшую производительность для некоторых длительно работающих приложений. Типичная производительность приложения находится на уровне PHP 7.4.
- Подобно аннотациям в Java и атрибутам на таких языках, как C# и Rust, атрибуты PHP предоставляют форму структурированных синтаксических метаданных для объявлений классов, констант, функций, методов, параметров и свойств. Атрибуты представляют собой специально отформатированный текст, заключенный в >> и >> путем повторного использования существующих токенов T_SL и T_SR.
- Именованные аргументы позволяют передавать аргументы функции на основе имени параметра, а не позиции параметра. Это делает значение аргумента самодокументируемым, а также делает аргументы независимыми от порядка и позволяет произвольно пропускать значения по умолчанию.
- В качестве улучшения кодирования используется оператор nullsafe, ?->, с полным коротким замыканием.
- Слабые карты позволяют создавать карту из объектов с произвольными значениями, не препятствуя сбору мусора для объектов, используемых в качестве ключей. Если ключ объекта собран в виде мусора, он будет удален с карты. Общий вариант использования слабых карт состоит в том, чтобы связать данные с отдельными экземплярами объектов, не требуя, чтобы они оставались живыми и эффективно пропускали память в длительных процессах.
- Продвижение свойств конструктора вводит синтаксис короткой руки, который позволяет комбинировать определение свойств и конструктор. Эта возможность позволяет решить ситуацию, в которой для определения простых объектов значений требуется много стандартного кода, поскольку все свойства необходимо повторить не менее четырех раз.
- Добавлена возможность выражения соответствия, аналогичная переключению, но с более безопасной семантикой и возможностью возвращать значения.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.