Outras mudanças
Mudanças no Núcleo
O tipo iterable agora é um apelido de tempo de compilação integrado para
array|Traversable.
As mensagens de erro relacionadas ao iterable
agora usarão
array|Traversable
.
Reflexão de tipo é preservada para iterable
único
(e ?iterable
) para produzir um
ReflectionNamedType com nome iterable
,
no entanto, o uso de iterable
em tipos de união
será convertido em array|Traversable
.
O formato da data dos cookies enviados agora é 'D, d M Y H:i:s \G\M\T'
;
anteriormente era 'D, d-M-Y H:i:s T'
.
Alterações nos Módulos SAPI
CLI
Os fluxos STDOUT, STDERR e STDIN não são mais fechados na destruição de recursos, que ocorre principalmente quando a CLI termina. No entanto, ainda é possível fechar explicitamente esses fluxos usando fclose() e similares.
Funções alteradas
Core
As funções strcmp(), strcasecmp(),
strncmp(), strncasecmp() e
substr_compare(), usando a comparação de string segura
binária não mais retornam garantidamente
strlen($string1) - strlen($string2)
quando os comprimentos das strings não forem
iguais, mas podem ao invés disso retornar -1
ou 1
.
Para não depender de nenhum valor concreto, o valor de retorno deve
ser comparado com 0
.
DBA
dba_open() e dba_popen() agora possuem a seguinte assinatura obrigatória:
string
$path
,string
$mode
,?string
$handler
= null
,int
$permission
= 0644,int
$map_size
= 0,?int
$flags
= null
): resource|false
O argumento opcional skip de dba_fetch()'s agora está no final de acordo com a semântica da área de usuário do PHP. Sua assinatura agora é:
A assinatura sobrecarregada: ainda é aceito, mas é recomendável usar a nova variante padrão.Random
random_bytes() e random_int() agora lançam um \Random\RandomException em falhas de CSPRNG. Anteriormente, um \Exception simples era lançado.
SPL
O parâmetro iterator
de
iterator_to_array() e iterator_count()
é ampliado para iterable de Iterator,
permitindo que arrays sejam passados.
Outras alterações nas extensões
Date
As propriedades de DatePeriod agora estão devidamente declaradas.
Intl
Instâncias de IntlBreakIterator, IntlRuleBasedBreakIterator, IntlCodePointBreakIterator, IntlPartsIterator, IntlCalendar, Collator, IntlIterator, UConverter, IntlDateFormatter, IntlDatePatternGenerator, MessageFormatter, ResourceBundle, Spoofchecker, IntlTimeZone, e Transliterator não são mais serializáveis. Anteriormente, eles podiam ser serializados, mas a desserialização produzia objetos inutilizáveis ou falhava.
MySQLi
O suporte para libmysql foi removido e não é mais possível compilar mysqli com libmysql. A partir de agora, a extensão mysqli pode ser compilada apenas com mysqlnd. Todos os recursos libmysql indisponíveis no mysqlnd foram removidos:
- A propriedade reconnect de mysqli_driver
- A diretiva INI mysqli.reconnect
- A constante
MYSQLI_IS_MARIADB
foi descontinuada
OCI8
A versão mínima da biblioteca Oracle Client exigida agora é 11.2.
PCRE
Caracteres NUL (\0
) em strings de expressão regular agora são suportados.
Session
Tentar alterar a diretiva INI da session.cookie_samesite enquanto a sessão está ativa ou a saída já foi enviada falhará e emitirá um aviso. Isso alinha o comportamento com todas as outras configurações INI da sessão.
SQLite3
sqlite3.defensive
agora é INI_USER
.
Standard
getimagesize() agora relata as dimensões reais da imagem, bits e canais de imagens AVIF. Anteriormente, as dimensões eram relatadas como 0x0 e bits e canais não eram relatados.
Tidy
As propriedades da classe tidy agora estão devidamente declaradas. E os da classe tidyNode agora são declarados corretamente como somente leitura.
Zip
A extensão Zip foi atualizada para a versão 1.20.0, que adiciona os seguintes métodos:
Alterações na manipulação de arquivos INI
O suporte para prefixos binários (0b
/0B
) e octal
(0o
/0O
) foi adicionado às configurações INI de número inteiro.
As configurações INI de número inteiro que começam com zero (0
)
continuam a ser interpretadas como um número inteiro octal.
A análise de alguns valores mal formatados agora acionará um aviso quando isso foi silenciosamente ignorado antes. Para compatibilidade com versões anteriores, a interpretação desses valores não mudou. Isso afeta as seguintes configurações:
- 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