Інші зміни

Зміни у ядрі

Типiterable тепер є вбудованим під час компіляції псевдонімом для array |Traversable. Тому повідомлення про помилки, пов'язані з типом iterable, будуть тепер використовувати сигнатуру array|Traversable. Тип Reflection зберігається для одиночного iterable?iterable) для созданияReflectionNamedTypeс именемiterable, проте використання iterable в об'єднаннях типів буде перетворено на array|Traversable

Формат дати надісланих файлів cookie тепер 'D, d M Y H:i:s \G\M\T'; раніше він був 'D, d-M-Y H:i:s T'

Зміни у модулях SAPI

CLI

Потоки STDOUT, STDERR та STDIN більше не закриваються при знищенні ресурсів, що найчастіше відбувається після завершення роботи CLI. Однак, як і раніше, можна явно закрити ці потоки за допомогою функції fclose() та подібних функцій.

Змінені функції

Ядро PHP

Функції strcmp() strcasecmp() strncmp() strncasecmp() і substr_compare(), що використовують бінарне безпечне порівняння рядків, тепер повертають -1 и

DBA

У функцииdba_open() і dba_popen()теперь следующая принудительная сигнатура:

dba_open(    string $path,    string $mode,    ?string $handler = null,    int $permission = 0644,    int $map_size = 0,    ?int $flags = null): resource|false

Необов'язковий аргумент skip функції dba_fetch() тепер знаходиться в кінці відповідно до семантики користувальницького простору PHP. Тепер його сигнатура виглядає так:

dba_fetch(string|array $key, resource $handle, int $skip): string|false

Попередня сигнатура:

dba_fetch(string|array $key, int $skip, resource $handle): string|false

як і раніше, приймається, але рекомендується використовувати новий стандартний варіант.

Random

Функції random_bytes() і random_int() тепер викидають виняток \Random\RandomException у разі помилок CSPRNG. Раніше натомість викидався звичайний виняток \Exception

SPL

Параметрiteratorфункцийiterator_to_array() і iterator_count()расширен доiterableизIteratorдозволяючи передавати масиви.

Інші зміни у модулях

Date

СвойстваDatePeriod тепер оголошено правильно.

Intl

Примірники IntlBreakIterator IntlRuleBasedBreakIterator IntlCodePointBreakIterator IntlPartsIterator IntlCalendar Collator IntlIterator UConverter IntlDateFormatter IntlDatePatternGenerator MessageFormatter ResourceBundle Spoofchecker IntlTimeZone і Transliterator більше не є серіалізованими. Раніше їх можна було серіалізувати, але за десеріалізації виходили непридатні об'єкти або виникали помилки.

MySQLi

Підтримка libmysql була видалена, і тепер неможливо скомпілювати mysqli з libmysql. З цього моменту модуль mysqli можна компілювати лише за допомогою mysqlnd. Усі функції libmysql, недоступні в mysqlnd, були видалені:

  • Властивість reconnect дляmysqli_driver
  • INI-директиваmysqli.reconnect
  • Константа**MYSQLI_IS_MARIADB**застаріла

OCI8

Мінімальна необхідна версія бібліотеки Oracle Client тепер 11.2.

PCRE

Тепер підтримуються символи NUL (\0) у рядках шаблонів.

Сесія

Спроба змінити INI-директиву session.cookie_samesite, коли сесія активна або висновок вже надісланий, тепер буде невдалою та видасть попередження. Ця зміна уніфікує поведінку за аналогією з усіма іншими налаштуваннями INI-директив сесії.

SQLite3

sqlite3.defensive тепер INI_USER

Стандартні функції

Функцияgetimagesize() тепер повідомляє фактичні розміри, біти та канали зображень AVIF. Раніше розміри повідомлялися як 0x0, а біти та канали взагалі не повідомлялися.

Tidy

Свойства классаtidy тепер оголошено правильно. А властивості класу tidyNode тепер правильно оголошено як доступні лише для читання.

Zip

Модуль Zip було оновлено до версії 1.20.0, до якої додано такі методи:

Зміни у роботі з INI-файлами

До цілих INI-параметрів додано підтримку двійкових (0b 0B) та вісімкових (0o 0O) префіксів. Цілочисельні INI-параметри, що починаються з нуля ( ), продовжують інтерпретуватися як вісімкове ціле число.

При розборі деяких неправильно відформатованих значень тепер видаватиметься попередження, якщо це мовчки ігнорувалося раніше. Для зворотної сумісності інтерпретація цих значень змінилася. Це впливає на наступні опції: