После закрывающего идентификатора в 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 были добавлены новые опции:
log_limit
log_buffering
decorate_workers_output
catch_workers_output
включена. Функция bcscale() теперь также может использоваться как геттер для извлечения текущего используемого масштаба.
Была добавлена полная поддержка LDAP Controls к функциям запросов LDAP и ldap_parse_result():
$controls
для отправки управления серверу в функциях 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(). $controls
для получения управления с сервера в функции 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).