'PHP 8.1 — большое обновление языка PHP: перечисления, readonly-свойства, callback-функции как объекты первого класса, файберы, пересечение типов, улучшения производительности и многое другое.', 'main_title' => 'доступен!', 'main_subtitle' => 'PHP 8.1 — большое обновление языка PHP.
Оно содержит множество новых возможностей, включая перечисления, readonly-свойства, callback-функции как объекты первого класса, файберы, пересечение типов, улучшения производительности и многое другое.', 'upgrade_now' => 'Переходите на PHP 8.1!', 'documentation' => 'Документация', 'enumerations_title' => 'Перечисления', 'enumerations_content' => 'Используйте перечисления вместо набора констант, чтобы валидировать их автоматически во время выполнения кода.', 'readonly_properties_title' => 'Readonly-свойства', 'readonly_properties_content' => '

Readonly-свойства нельзя изменить после инициализации (т.е. когда им было присвоено значение).
Они будут крайне полезны при реализации объектов типа VO и DTO.

', 'first_class_callable_syntax_title' => 'Callback-функции как объекты первого класса', 'first_class_callable_syntax_content' => '

С помощью нового синтаксиса любая функция может выступать в качестве объекта первого класса. Тем самым она будет рассматриваться как обычное значение, которое можно, например, сохранить в переменную.

', 'new_in_initializers_title' => 'Расширенная инициализация объектов ', 'new_in_initializers_content' => '

Объекты теперь можно использовать в качестве значений параметров по умолчанию, статических переменных и глобальных констант, а также в аргументах атрибутов.

Таким образом появилась возможность использования вложенных атрибутов.

', 'pure_intersection_types_title' => 'Пересечение типов', 'pure_intersection_types_content' => '

Теперь в объявлении типов параметров можно указать, что значение должно относиться к нескольким типам одновременно.

В данный момент пересечения типов нельзя использовать вместе с объединёнными типами, например, A&B|C.

', 'never_return_type_title' => 'Тип возвращаемого значения never', 'never_return_type_content' => '

Функция или метод, объявленные с типом never, указывают на то, что они не вернут значение и либо выбросят исключение, либо завершат выполнение скрипта с помощью вызова функции die(), exit(), trigger_error() или чем-то подобным.

', 'final_class_constants_title' => 'Окончательные константы класса', 'final_class_constants_content' => '

Теперь константы класса можно объявить как окончательные (final), чтобы их нельзя было переопределить в дочерних классах.

', 'octal_numeral_notation_title' => 'Явное восьмеричное числовое обозначение', 'octal_numeral_notation_content' => '

Теперь можно записывать восьмеричные числа с явным префиксом 0o.

', 'fibers_title' => 'Файберы', 'fibers_content' => '

Файберы — это примитивы для реализации облегчённой невытесняющей конкурентности. Они являются средством создания блоков кода, которые можно приостанавливать и возобновлять, как генераторы, но из любой точки стека. Файберы сами по себе не предоставляют возможностей асинхронного выполнения задач, всё равно должен быть цикл обработки событий. Однако они позволяют блокирующим и неблокирующим реализациям использовать один и тот же API.

Файберы позволяют избавиться от шаблонного кода, который ранее использовался с помощью Promise::then() или корутин на основе генератора. Библиотеки обычно создают дополнительные абстракции вокруг файберов, поэтому нет необходимости взаимодействовать с ними напрямую.

', 'array_unpacking_title' => 'Поддержка распаковки массивов со строковыми ключами', 'array_unpacking_content' => '

PHP раньше поддерживал распаковку массивов с помощью оператора ..., но только если массивы были с целочисленными ключами. Теперь можно также распаковывать массивы со строковыми ключами.

', 'performance_title' => 'Улучшения производительности', 'performance_chart' => 'Время запроса демо-приложения Symfony
25 последовательных запусков по 250 запросов (сек)
(чем меньше тем лучше)
', 'performance_results_title' => 'Результат (относительно PHP 8.0):', 'performance_results_symfony' => 'Ускорение демо-приложения Symfony на 23,0%', 'performance_results_wordpress' => 'Ускорение WordPress на 3,5%', 'performance_related_functions_title' => 'Функциональность с улучшенной производительностью в PHP 8.1:', 'performance_jit_arm64' => 'Бэкенд JIT для ARM64 (AArch64).', 'performance_inheritance_cache' => 'Кеш наследования (не требуется связывать классы при каждом запросе).', 'performance_fast_class_name_resolution' => 'Ускорено разрешение имени класса (исключены преобразование регистра имени и поиск по хешу).', 'performance_timelib_date_improvements' => 'Улучшения производительности timelib и ext/date.', 'performance_spl' => 'Улучшения итераторов файловой системы SPL.', 'performance_serialize_unserialize' => 'Оптимизация функций serialize()/unserialize().', 'performance_internal_functions' => 'Оптимизация некоторых внутренних функций (get_declared_classes(), explode(), strtr(), strnatcmp(), dechex()).', 'performance_jit' => 'Улучшения и исправления JIT.', 'other_new_title' => 'Новые классы, интерфейсы и функции', 'other_new_returntypewillchange' => 'Добавлен новый атрибут #[ReturnTypeWillChange].', 'other_new_fsync_fdatasync' => 'Добавлены функции fsync и fdatasync.', 'other_new_array_is_list' => 'Добавлена новая функция array_is_list.', 'other_new_sodium_xchacha20' => 'Новые функции Sodium XChaCha20.', 'bc_title' => 'Устаревшая функциональность и изменения в обратной совместимости', 'bc_null_to_not_nullable' => 'Передача значения NULL параметрам встроенных функций, не допускающим значение NULL, объявлена устаревшей.', 'bc_return_types' => 'Предварительные типы возвращаемых значений во встроенных методах классов PHP', 'bc_serializable_deprecated' => 'Интерфейс Serializable объявлен устаревшим.', 'bc_html_entity_encode_decode' => 'Функции по кодированию/декодированию HTML-сущностей по умолчанию преобразуют одинарные кавычки и заменяют недопустимые символы на символ замены Юникода.', 'bc_globals_restrictions' => 'Ограничены способы использования переменной $GLOBALS.', 'bc_mysqli_exceptions' => 'Модуль MySQLi: режим ошибок по умолчанию установлен на выбрасывание исключения.', 'bc_float_to_int_conversion' => 'Неявное преобразование числа с плавающей точкой к целому с потерей ненулевой дробной части объявлено устаревшим.', 'bc_finfo_objects' => 'Модуль finfo: ресурсы file_info заменены на объекты finfo.', 'bc_imap_objects' => 'Модуль IMAP: ресурсы imap заменены на объекты IMAP\Connection.', 'bc_ftp_objects' => 'Модуль FTP: ресурсы Connection заменены на объекты FTP\Connection.', 'bc_gd_objects' => 'Модуль GD: Font identifiers заменены на объекты GdFont.', 'bc_ldap_objects' => 'Модуль LDAP: ресурсы заменены на объекты LDAP\Connection, LDAP\Result и LDAP\ResultEntry.', 'bc_postgresql_objects' => 'Модуль PostgreSQL: ресурсы заменены на объекты PgSql\Connection, PgSql\Result и PgSql\Lob.', 'bc_pspell_objects' => 'Модуль Pspell: ресурсы pspell, pspell config заменены на объекты PSpell\Dictionary, PSpell\Config.', 'footer_title' => 'Выше производительность, лучше синтаксис, надёжнее система типов.', 'footer_content' => '

Для загрузки исходного кода PHP 8.1 посетите страницу Downloads. Бинарные файлы Windows находятся на сайте PHP for Windows. Список изменений перечислен на странице ChangeLog.

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

', ];