Нові можливості

Ядро 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() :

Функції мультибайтових рядків

Повна підтримка 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).