Alterações incompatíveis com versões anteriores
PHP Core
Programas que estavam muito próximos de estourar a pilha de chamadas.
Programas que estavam muito próximos de esgotar a pilha de chamadas agora podem lançar um Error ao usar mais do que !-- link linkend="zend.max_allowed_stack_size-zend.reserved_stack_size" -->zend.max_allowed_stack_size-zend.reserved_stack_size bytes de pilha (fiber.stack_size-zend.reserved_stack_size para fibers).
Executando proc_get_status() várias vezes
Executar proc_get_status() várias vezes agora sempre
retornará o valor correto em sistemas POSIX. Anteriormente, apenas a primeira chamada
da função retornava o valor correto. Executar
proc_close() após proc_get_status()
agora também retornará o código de saída correto. Anteriormente, isso retornaria
-1
.
Internamente, isso funciona armazenando em cache o resultado em sistemas POSIX.
Se for necessário o comportamento anterior, é possível verificar a chave
"cached"
no array retornado por
proc_get_status() para verificar se o resultado foi armazenado em cache.
Temporizadores Máximos de Execução do Zend
Os Temporizadores Máximos de Execução do Zend agora estão habilitados por padrão para compilações ZTS no Linux.
Usos de traits com propriedades estáticas
O uso de traits com propriedades estáticas agora irá redeclarar as propriedades estáticas herdadas da classe pai. Isso criará um armazenamento de propriedade estática separado para a classe atual. Isso é análogo a adicionar a propriedade estática diretamente à classe sem o uso de traits.
Atribuir um índice negativo a um array vazio
Atribuir um índice negativo $n a um array vazio agora garantirá que o
próximo índice seja $n+1
, em vez de 0
.
Verificação de consistência na visibilidade de constantes de classe
A variação na visibilidade de constantes de classe agora é verificada corretamente quando herdada de interfaces.
Entradas WeakMap cuja chave mapeia para si mesma
As entradas WeakMap cuja chave mapeia para si mesma (possivelmente de forma transitiva) agora podem ser removidas durante a coleta de ciclos se a chave não for alcançável, exceto por meio da iteração sobre o WeakMap (a alcançabilidade por iteração é considerada fraca). Anteriormente, tais entradas nunca seriam removidas automaticamente.
Date
A extensão DateTime introduziu exceções e erros específicos da extensão Date sob as hierarquias DateError e DateException, em vez de avisos e exceções genéricas. Isso melhora o tratamento de erros, embora exija que se verifiquem erros e exceções.
DOM
Chamar DOMChildNode::after(), DOMChildNode::before(), DOMChildNode::replaceWith() em um nó que não tem pai agora não faz nada (no-op) em vez de gerar uma exceção de hierarquia, conforme exigido pela especificação DOM.
Usar os métodos DOMParentNode
e DOMChildNode sem um documento agora funciona
em vez de lançar uma exceção DOM_HIERARCHY_REQUEST_ERR
DOMException.
Isso está de acordo com o comportamento exigido pela especificação DOM.
Chamar DOMDocument::createAttributeNS() sem especificar um prefixo criaria incorretamente um namespace padrão, colocando o elemento dentro do namespace em vez do atributo. Esse erro foi corrigido.
Anteriormente, DOMDocument::createAttributeNS()
lançaria incorretamente uma exceção DOM_NAMESPACE_ERRNAMESPACE_ERR
DOMException quando o prefixo já estivesse sendo usado para
outro URI. Agora, ele escolhe corretamente um prefixo diferente quando há conflito
de nomes de prefixo.
Foram adicionados novos métodos e propriedades a algumas classes DOM. Se uma classe definida pelo usuário herda dessas classes e declara um método ou propriedade com o mesmo nome, as declarações devem ser compatíveis. Caso contrário, ocorrerá um erro de compilação típico relacionado a declarações incompatíveis. Consulte a lista de novas funcionalidades e novas funções para obter uma lista dos métodos e propriedades recém-implementados.
FFI
As funções C que têm um tipo de retorno void agora retornam null
em vez de
retornar o seguinte objeto object(FFI\CData:void) { }
.
Opcache
A diretiva INI opcache.consistency_checks foi removida. Essa funcionalidade estava quebrada com o tracing JIT, bem como com o inheritance cache, e foi desativada sem a possibilidade de ser habilitada desde o PHP 8.1.18 e o PHP 8.2.5. Tanto o tracing JIT quanto o inheritance cache podem modificar a memória compartilhada (shm) depois que o script foi persistido, invalidando seu checksum. A tentativa de correção ignorou os ponteiros modificáveis, mas foi rejeitada devido à complexidade. Por esse motivo, foi decidido remover a funcionalidade em vez de mantê-la.
Phar
O tipo das constantes de classe da classe Phar agora está declarado.
Standard
A função range() sofreu várias mudanças:
- Agora é lançado um TypeError ao passar objects, resources ou arrays como entradas de limite.
- Agora é lançado um ValueError mais descritivo
ao passar
0
para$step
. - Agora é lançado um ValueError ao usar um
$step
negativo para intervalos crescentes. - Se
$step
for um número em ponto flutuante que pode ser interpretado como um número inteiro, ele agora será tratado como tal. - Agora, um ValueError é lançado se qualquer argumento for infinito ou NAN.
- Agora, é gerado um
E_WARNING
se$start
ou$end
for uma string vazia. O valor ainda é convertido para o valor0
. - Agora, é gerado um
E_WARNING
se$start
ou$end
tiver mais de um byte, desde que seja uma string não numérica. - Agora, é gerado um
E_WARNING
se$start
ou$end
for convertido para um inteiro porque a outra entrada de limite é um número (por exemplo,range(5, 'z');
). - Agora, é gerado um
E_WARNING
se$step
for um número em ponto flutuante ao tentar gerar um intervalo de caracteres, exceto se ambas as entradas de limite forem strings numéricas (por exemplo,range('5', '9', 0.5);
não gera um aviso). - range() agora gera uma lista de caracteres se uma das
entradas de limite for um dígito em forma de string, em vez de converter a outra entrada
para um número inteiro (por exemplo,
range('9', 'A');
).
<?php
range('9', 'A'); // ["9", ":", ";", "<", "=", ">", "?", "@", "A"], a partir do PHP 8.3.0
range('9', 'A'); // [9, 8, 7, 6, 5, 4, 3, 2, 1, 0], antes do PHP 8.3.0
?>
number_format() agora lida com valores negativos de
$decimals
arredondando
$num
para abs($decimals)
dígitos antes do
separador decimal. Anteriormente, valores negativos de $decimals
eram ignorados.
A verificação de erros das flags da função file() agora identifica todas as flags inválidas.
Notavelmente, FILE_APPEND
era anteriormente aceito silenciosamente.
SNMP
O tipo das constantes de classe da classe SNMP agora está declarado.