После закрывающего идентификатора в doc-строках больше не нужно ставить точку с запятой или новую строку. Кроме того, закрывающий идентификатор может быть с отступом, и в этом случае он будет удален из всех строк в doc-строке.
Деструктурирование массива теперь поддерживает присвоение по ссылкам с помощью синтаксиса [&$a, [$b, &$c]] = $d. То же самое поддерживается и для list().
Оператор instanceof теперь поддерживает литералы в качестве первого операнда,
и в этом случае результат будет всегда FALSE
.
Добавлено новое исключение CompileError, которое наследуется от ParseError.
Небольшое количество ошибок компиляции теперь будет выбрасывать CompileError вместо создания фатальной ошибки.
В настоящее время это влияет только на ошибки компиляции, которые могут быть созданы token_get_all()
в режиме TOKEN_PARSE
, но в будущем может быть преобразовано больше ошибок.
Завершающие запятые в вызовах функций и методов теперь разрешены.
С аргументом --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.
Для настройки логирования FPM были добавлены новые опции:
Функция bcscale() теперь также может использоваться как геттер для извлечения текущего используемого масштаба.
Была добавлена полная поддержка LDAP Controls к функциям запросов LDAP и ldap_parse_result():
LDAP_OPT_SERVER_CONTROLS
и
LDAP_OPT_CLIENT_CONTROLS
в функциях
ldap_get_option() и
ldap_set_option() была исправлена.
Добавлен поддержка полного процесса преобразования регистра символов (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-mapping регистра при сравнении. Это означает, что теперь больше символов будут считаться (без учета регистра) равными.
Функция mb_convert_case() с MB_CASE_TITLE
теперь выполняет преобразование title-case
в зависимости от свойств Unicode, основанных на Cased и CaseIgnorable.
В частности, это также улучшает обработку кавычек и апостофов.
Таблицы данных мультибайтовых строк были обновлены до Юникода версии 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_info() добавлена поддержка параметров completion_append_character и completion_suppress_append. Эти опции доступны, только если PHP скомпилирован с библиотекой libreadline (а не libedit).