Нові можливості
Ядро PHP
Гнучкіший синтаксис Heredoc і Nowdoc
Після ідентифікатора, що закриває, в doc-рядках більше не потрібно ставити крапку з комою або новий рядок. Крім того, ідентифікатор, що закриває, може бути з відступом, і в цьому випадку він буде видалений з усіх рядків в doc-рядку.
Деструктурування масиву підтримує присвоєння за посиланнями
Деструктурування масиву тепер підтримує присвоєння посилань за допомогою синтаксису [&$a, [$b, &$c]] = $d
. Те саме підтримується і для list()
Оператор встануприймає літерали
Оператор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 може змінити довжину рядка. Приклад:
Loading...
Різні режими перетворення та порівняння регістру символів доступні у функції mb_convert_case() :
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:
Loading...
Крім того, функція mb_ereg_replace() тепер підтримує позначення \k<>
и\k''
для посилання на іменовані фрагменти в рядку, що замінює:
Loading...
\k<>
и\k''
також можуть використовуватися для нумерованих посилань, які також працюють із номерами груп більше 9.
Readline
У функції readline_info()добавлена поддержка параметровcompletion_append_character
иcompletion_suppress_append
. Ці опції доступні, тільки якщо PHP скомпільовано з бібліотекою libreadline (а не libedit).