Вышел PHP 8.1

Вышел PHP 8.1

Спустя год после старта разработки вышел релиз языка программирования PHP 8.1. В версию добавили ряд улучшений.

Изменения в PHP 8.1 включают:

  • поддержку перечислений (enum)
  • поддержку легковесных потоков или файберов (Fiber) с возможностью управлять этими потоками на низком уровне. Файберы же позволяют определять блоки кода, выполнение которых может быть приостановлено и возобновлено по аналогии с генераторами, но из любой позиции стека. Они дают возможность использовать один и тот же API в коде, работающем в блокирующем и неблокирующем режимах
  • улучшение реализации кэша объектного кода (opcache) с возможностью кэширования информации о наследовании классов. Это повысит производительность некоторых приложений на 5-8%
  • оптимизацию работы JIT, реализацию поддержки JIT для архитектуры ARM64 (AArch64), ускорение разрешения имён классов, оптимизацию библиотек timelib и ext/date, повышение производительности сериализации и десериализации, оптимизацию функций get_declared_classes(), explode(), strtr(), strnatcmp() и dechex(). Производительность Symfony Demo выросла на 23%, а WordPress — на 3,5%
  • включение оператора распаковки внутри массивов "...$var", что позволит выполнять подстановку существующих массивов при определении нового, расширение поддержки строковых ключей
  • использование ключевого слова "new" в инициализаторах, чтобы применять объекты в качестве значений параметров по умолчанию, статических переменных, глобальных констант и в аргументах атрибутов, а также при создании вложенных атрибутов
  • возможность пометки свойств класса для доступа только для чтения (информация в подобные свойства может быть записана только один раз)
  • новый синтаксис для вызываемых объектов (callable) — замыкание теперь можно сформировать, вызвав функцию и передав ей в качестве аргумента значение "..." (т.е. для получения ссылки на функцию можно использовать myFunc(...) вместо Closure::fromCallable('myFunc'))
  • полноценная поддержка пересечений типов (intersection types), чтобы создавать новые типы, значения которых должны подпадать одновременно под несколько типов
  • новый тип "never", который можно использовать для информирования статических анализаторов о том, что функция прекращает выполнение программы, например, вызывая исключение или выполняя функцию exit
  • новую функцию array_is_list, которая позволяет определить, что ключи в массиве расположены в порядке увеличения числовых значений, начиная с 0
  • для запрета переопределения констант родительского класса теперь можно использовать ключевое слово "final"
  • функции fsync и fdatasync для принудительного сохранения изменений из дискового кэша
  • возможность использования префиксов "0o" и "0O" для восьмеричных чисел, помимо ранее применявшегося префикса "0"
  • выборочное ограничение применения $GLOBALS, что приведет к нарушению обратной совместимости, но даст возможность значительно ускорить операции с массивами. Запрещена запись в $GLOBALS и передача $GLOBALS по указателю. Анализ 2000 пакетов показал, что только 23 из них затронет данное изменение
  • отказ от неявного несовместимого преобразования чисел с плавающей запятой (float) в целочисленного представления (int), приводящих к потере точности. Изменение применимо при преобразовании значений ключей массивов, принудительном объявлении целочисленных типов и в операторах, работающих только с целыми числами
  • внутренние методы теперь должны возвращать корректный тип. В противном случае будут выводиться предупреждения, а в PHP 9.0 их заменят на ошибку
  • работа по переводу функций c использования ресурсов на манипуляцию объектами. На объекты переведены функции finfo_* и imap_*
  • отказ от передачи значений null в качестве аргументов внутренних функций, помеченных как non-nullable. В PHP 8.1 использование конструкций вида str_contains("string", null) будет приводить к предупреждению, а в PHP 9 — к ошибке
  • отказ от программного интерфейса Serializable
  • во многих модулях ресурсы преобразованы в объекты (file_info -> finfo в FileInfo, FTP\Connection, IMAP\Connection, LDAP\Connection|Result, PgSql\Connection|Result, PSpell\Dictionary, GdFont в GD и т.п.)
  • поддержка алгоритмов хэширования MurmurHash3 и xxHash

22 ноября 2021 года сообщество разработчиков языка PHP учредило некоммерческую организацию PHP Foundation. Ее цель — создать структуру, отвечающую за организацию финансирования и продвижения проекта PHP, включая поддержку сообщества разработчиков, их трудоустройства и обеспечение им необходимых условий для развития проекта. На базе PHP Foundation уже работает система совместного финансирования контрибуторов проекта. В 2022 году PHP Foundation планирует начать выдавать гранты для разработчиков по мере расширения бюджета организации.

Поделиться
Больше не нужно искать и обзванивать диджитал-агентства!
Создайте тендер и получите предложения от лучших веб-студий Украины.
В каталоге 1700+ диджитал-агентств, готовых помочь в реализации ваших задач. Выберайте и экономьте до 30% своего времени и бюджета! Это бесплатно и займет менее 3-х минут.
Создать тендер
Статьи по теме
01-01-1970
01-01-1970
01-01-1970
01-01-1970
Перейти к списку статей
Подписка на рассылку
Получайте одно письмо в неделю с самыми важными новостями.
Bug