Тип 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'
.
Потоки STDOUT, STDERR и STDIN больше не закрываются при уничтожении ресурсов, что чаще всего происходит при завершении работы CLI. Однако по-прежнему можно явно закрыть эти потоки с помощью функции fclose() и подобных функций.
Функции strcmp(), strcasecmp(),
strncmp(), strncasecmp()
и substr_compare(), которые сравнивают строки бинарно-безопасным способом,
больше не гарантируют возврат результата strlen($string1) - strlen($string2)
,
когда длины строк не равны, но теперь вместо этого могут возвращать значения -1
или 1
.
Вместо зависимости от какого-либо конкретного значения, возвращаемое значение должно
сравниваться со значением 0
.
У функции dba_open() и dba_popen() теперь следующая принудительная сигнатура:
$path
,$mode
,$handler
= null
,$permission
= 0644,$map_size
= 0,$flags
= null
Необязательный аргумент skip функции dba_fetch() теперь находится в конце в соответствии с семантикой пользовательского пространства PHP. Теперь его сигнатура выглядит следующим образом:
Предыдущая сигнатура: по-прежнему принимается, но рекомендуется использовать новый стандартный вариант.Функции random_bytes() и random_int() теперь выбрасывают исключение \Random\RandomException в случае возникновения ошибок CSPRNG. Ранее вместо этого выбрасывалось обычное исключение \Exception.
Параметр iterator
функций iterator_to_array()
и iterator_count() расширен до iterable
из Iterator, позволяя передавать массивы.
Свойства DatePeriod теперь объявлены правильно.
Экземпляры IntlBreakIterator, IntlRuleBasedBreakIterator, IntlCodePointBreakIterator, IntlPartsIterator, IntlCalendar, Collator, IntlIterator, UConverter, IntlDateFormatter, IntlDatePatternGenerator, MessageFormatter, ResourceBundle, Spoofchecker, IntlTimeZone и Transliterator больше не являются сериализуемыми. Ранее их можно было сериализовать, но при десериализации получались непригодные объекты или возникали ошибки.
Поддержка libmysql была удалена и теперь невозможно скомпилировать mysqli с libmysql. С этого момента модуль mysqli можно компилировать только с помощью mysqlnd. Все функции libmysql, недоступные в mysqlnd, были удалены:
MYSQLI_IS_MARIADB
устарелаМинимальная необходимая версия библиотеки Oracle Client теперь 11.2.
Теперь поддерживаются символы NUL (\0
) в строках шаблонов.
Попытка изменить INI-директиву session.cookie_samesite, когда сессия активна или вывод уже отправлен, теперь будет неудачной и выдаст предупреждение. Это изменение унифицирует поведение по аналогии со всеми другими настройками INI-директив сессии.
sqlite3.defensive
теперь INI_USER
.
Функция getimagesize() теперь сообщает фактические размеры, биты и каналы изображений AVIF. Ранее размеры сообщались как 0x0, а биты и каналы вообще не сообщались.
Свойства класса tidy теперь объявлены правильно. А свойства класса tidyNode теперь правильно объявлены как доступные только для чтения.
Модуль Zip был обновлён до версии 1.20.0, в которой добавлены следующие методы:
К целочисленным INI-параметрам добавлена поддержка двоичных (0b
/0B
)
и восьмеричных (0o
/0O
) префиксов.
Целочисленные INI-параметры, начинающиеся с нуля (0
),
продолжают интерпретироваться как восьмеричное целое число.
При разборе некоторых неправильно отформатированных значений теперь будет выдаваться предупреждение, если раньше это молча игнорировалось. Для обратной совместимости интерпретация этих значений не изменилась. Это влияет на следующие настройки: