Інші зміни
Зміни у ядрі
Тип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-параметри, що починаються з нуля ( ), продовжують інтерпретуватися як вісімкове ціле число.
При розборі деяких неправильно відформатованих значень тепер видаватиметься попередження, якщо це мовчки ігнорувалося раніше. Для зворотної сумісності інтерпретація цих значень змінилася. Це впливає на наступні опції:
- bcmath.scale
- com.code_page
- default_socket_timeout
- fiber.stack_size
- hard_timeout
- intl.error_level
- ldap.max_links
- max_input_nesting_level
- max_input_vars
- mbstring.regex_retry_limit
- mbstring.regex_stack_limit
- mysqli.allow_local_infile
- mysqli.allow_persistent
- mysqli.default_port
- mysqli.max_links
- mysqli.max_persistent
- mysqli.rollback_on_cached_plink
- mysqlnd.log_mask
- mysqlnd.mempool_default_size
- mysqlnd.net_read_buffer_size
- mysqlnd.net_read_timeout
- oci8.default_prefetch
- oci8.max_persistent
- oci8.persistent_timeout
- oci8.ping_interval
- oci8.prefetch_lob_size
- oci8.privileged_connect
- oci8.statement_cache_size
- odbc.allow_persistent
- odbc.check_persistent
- odbc.max_persistent
- odbc.max_links
- odbc.defaultbinmode
- odbc.default_cursortype
- odbc.defaultlrl
- opcache.consistency_checks
- opcache.file_update_protection
- opcache.force_restart_timeout
- opcache.interned_strings_buffer
- opcache.jit_bisect_limit
- opcache.jit_blacklist_root_trace
- opcache.jit_blacklist_side_trace
- opcache.jit_debug
- opcache.jit_hot_func
- opcache.jit_hot_loop
- opcache.jit_hot_return
- opcache.jit_hot_side_exit
- opcache.jit_max_exit_counters
- opcache.jit_max_loop_unrolls
- opcache.jit_max_polymorphic_calls
- opcache.jit_max_recursive_calls
- opcache.jit_max_recursive_returns
- opcache.jit_max_root_traces
- opcache.jit_max_side_traces
- opcache.log_verbosity_level
- opcache.max_file_size
- opcache.opt_debug_level
- opcache.optimization_level
- opcache.revalidate_freq
- output_buffering
- pcre.backtrack_limit
- pcre.recursion_limit
- pgsql.max_links
- pgsql.max_persistent
- post_max_size
- realpath_cache_size
- realpath_cache_ttl
- session.cache_expire
- session.cookie_lifetime
- session.gc_divisor
- session.gc_maxlifetime
- session.gc_probability
- soap.wsdl_cache_limit
- soap.wsdl_cache_ttl
- unserialize_max_depth
- upload_max_filesize
- user_ini.cache_ttl
- xmlrpc_error_number
- zend.assertions
- zlib.output_compression_level