Новые возможности
Ядро PHP
Более гибкий синтаксис Heredoc и Nowdoc
После закрывающего идентификатора в doc-строках больше не нужно ставить точку с запятой или новую строку. Кроме того, закрывающий идентификатор может быть с отступом, и в этом случае он будет удален из всех строк в doc-строке.
Деструктурирование массива поддерживает присвоение по ссылкам
Деструктурирование массива теперь поддерживает присвоение по ссылкам с помощью синтаксиса
[&$a, [$b, &$c]] = $d
. То же самое поддерживается и для list().
Оператор instanceof принимает литералы
Оператор instanceof
теперь поддерживает литералы в качестве первого операнда,
и в этом случае результат будет всегда false
.
Исключение CompileError вместо некоторых ошибок компиляции
Добавлено новое исключение CompileError, которое наследуется от ParseError.
Небольшое количество ошибок компиляции теперь будет выбрасывать CompileError вместо создания фатальной ошибки.
В настоящее время это влияет только на ошибки компиляции, которые могут быть созданы token_get_all()
в режиме TOKEN_PARSE
, но в будущем может быть преобразовано больше ошибок.
В вызовах разрешена завершающая запятая
Завершающие запятые в вызовах функций и методов теперь разрешены.
Поддержка Argon2id
С аргументом --with-password-argon2[=dir] скрипта configure
теперь поддерживаются оба хеша, как Argon2i, так и Argon2id, в функциях
password_hash(), password_verify(),
password_get_info() и
password_needs_rehash(). Пароли могут быть хешированы
и проверены, используя константу PASSWORD_ARGON2ID
.
Поддержка обоих алгоритмов Argon2i и Argon2id в функциях семейства password_*()
теперь требует, чтобы PHP был скомпилирован с библиотекой libargon2 версии ≥
20161029.
Менеджер процессов FastCGI
Для настройки логирования FPM были добавлены новые опции:
-
log_limit
- Эта глобальная опция может использоваться для установки лимита логирования для строки логирования, позволяющая записывать сообщения длиной более 1024 символов без переноса. Также исправляет различные проблемы с упаковкой (wrapping).
-
log_buffering
- Этот глобальная опция позволяет вести экспериментальное логирование без дополнительной буферизации.
-
decorate_workers_output
-
Этот вариант пула позволяет отключить отметку вывода (output decoration) для обработчиков,
когда
catch_workers_output
включена.
Функции BC Math
Функция bcscale() теперь также может использоваться как геттер для извлечения текущего используемого масштаба.
Облегчённый протокол доступа к каталогам (LDAP)
Была добавлена полная поддержка LDAP Controls к функциям запросов LDAP и ldap_parse_result():
-
Добавлен параметр
$serverctrls
для отправки управления серверу в функциях ldap_add(), ldap_mod_replace(), ldap_mod_add(), ldap_mod_del(), ldap_rename(), ldap_compare(), ldap_delete(), ldap_modify_batch(), ldap_search(), ldap_list() и ldap_read(). -
Добавлен параметр
$serverctrls
для получения управления с сервера в функции ldap_parse_result(). -
Поддержка
LDAP_OPT_SERVER_CONTROLS
иLDAP_OPT_CLIENT_CONTROLS
в функциях ldap_get_option() и ldap_set_option() была исправлена.
Функции мультибайтовых строк
Полная поддержка case-mapping и case-folding
Добавлен поддержка полного процесса преобразования регистра символов (case-mapping) и сравнение на идентичность разных регистров (case-folding). В отличие от простого case-mapping, полный case-mapping может изменить длину строки. Пример:
<?php
mb_strtoupper("Straße");
// Выведет STRAßE в PHP 7.2
// Выведет STRASSE в PHP 7.3
?>
-
MB_CASE_LOWER
(используется mb_strtolower()) -
MB_CASE_UPPER
(используется mb_strtoupper()) -
MB_CASE_TITLE
-
MB_CASE_FOLD
-
MB_CASE_LOWER_SIMPLE
-
MB_CASE_UPPER_SIMPLE
-
MB_CASE_TITLE_SIMPLE
-
MB_CASE_FOLD_SIMPLE
(используется нечувствительными к регистру операциями)
Операции, нечувствительные к регистру используют case-folding
Строковые операции без учета регистра теперь используют case-folding вместо case-mapping регистра при сравнении. Это означает, что теперь больше символов будут считаться (без учета регистра) равными.
MB_CASE_TITLE выполняет преобразование title-case
Функция mb_convert_case() с MB_CASE_TITLE
теперь выполняет преобразование title-case
в зависимости от свойств Unicode, основанных на Cased и CaseIgnorable.
В частности, это также улучшает обработку кавычек и апостофов.
Поддержка Unicode 11
Таблицы данных мультибайтовых строк были обновлены до Юникода версии 11.
Поддержка больших строк
Функции мультибайтовых строк теперь корректно поддерживают строки размером более 2 Гб.
Улучшение производительности
Производительность модуля мультибайтовых строк была значительно повсеместно улучшена. Самые большие улучшения в функциях преобразования регистра.
Поддержка именованных фрагментов
Функции mb_ereg_*
теперь поддерживают именованные фрагменты.
Соответствующие функции, такие как mb_ereg(), теперь будут
возвращать именованные фрагменты как с их номером группы, так и с их именем, аналогично PCRE:
<?php
mb_ereg('(?<word>\w+)', '国', $matches);
// => [0 => "国", 1 => "国", "word" => "国"];
?>
\k<>
и \k''
для ссылки на именованные
фрагменты в заменяющей строке:
<?php
mb_ereg_replace('\s*(?<word>\w+)\s*', "_\k<word>_\k'word'_", ' foo ');
// => "_foo_foo_"
?>
\k<>
и \k''
также могут использоваться
для нумерованных ссылок, которые также работают с номерами групп больше 9.
Readline
В функции readline_info() добавлена поддержка параметров
completion_append_character
и completion_suppress_append
.
Эти опции доступны, только если PHP скомпилирован с библиотекой libreadline (а не libedit).