International PHP Conference Berlin 2023

Другие изменения

Изменения в ядре

Тип iterable теперь является встроенным во время компиляции псевдонимом для array|Traversable. Поэтому сообщения об ошибках, связанных с типом iterable, будут теперь будут использовать сигнатуру array|Traversable. Тип Reflection сохраняется для одиночного iterable?iterable) для создания ReflectionNamedType с именем iterable, однако использование iterable в объединениях типов будет преобразовано в array|Traversable.

Изменения в модулях SAPI

CLI

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

Изменённые функции

Ядро PHP

Функции strcmp(), strcasecmp(), strncmp(), strncasecmp() и substr_compare(), использующие бинарное безопасное сравнение строк, теперь возвращают -1, 0 и 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, IntlCalendar, Collator, IntlIterator, UConverter, IntlDateFormatter, IntlDatePatternGenerator, MessageFormatter, ResourceBundle, Spoofchecker, IntlTimeZone и Transliterator больше не являются сериализуемыми. Ранее их можно было сериализовать, но при десериализации получались непригодные объекты или возникали ошибки.

MySQLi

Поддержка libmysql была удалена и теперь невозможно скомпилировать mysqli с libmysql. С этого момента модуль mysqli можно компилировать только с помощью mysqlnd. Все функции libmysql, недоступные в mysqlnd, были удалены:

OCI8

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

PCRE

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

Сессия

Попытка изменить INI-директиву session.cookie_samesite, когда сессия активна или вывод уже отправлен, теперь будет неудачной и выдаст предупреждение. Это изменение унифицирует поведение по аналогии со всеми другими настройками INI-директив сессии.

SQLite3

sqlite3.defensive теперь PHP_INI_USER.

Стандартные функции

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

Tidy

Свойства класса tidy теперь объявлены правильно. А свойства класса tidyNode теперь правильно объявлены как доступные только для чтения.

Zip

Модуль Zip был обновлён до версии 1.20.0, в которой добавлены следующие методы:

Изменения в работе с INI-файлами

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

При разборе некоторых неправильно отформатированных значений теперь будет выдаваться предупреждение, если раньше это молча игнорировалось. Для обратной совместимости интерпретация этих значений не изменилась. Это влияет на следующие настройки:

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top