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).
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.
Os Temporizadores Máximos de Execução do Zend agora estão habilitados por padrão para compilações ZTS no Linux.
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 $n a um array vazio agora garantirá que o
próximo índice seja $n+1, em vez de 0.
A variação na visibilidade de constantes de classe agora é verificada corretamente quando herdada de interfaces.
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.
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.
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.
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) { }.
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.
O tipo das constantes de classe da classe Phar agora está declarado.
A função range() sofreu várias mudanças:
0 para step.step negativo para intervalos crescentes.step for um número em ponto flutuante
que pode ser interpretado como um número inteiro, ele agora será tratado como tal.E_WARNING se
start ou end for uma
string vazia. O valor ainda é convertido para o valor 0.E_WARNING se
start ou end tiver mais de
um byte, desde que seja uma string não numérica.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');).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('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.
O tipo das constantes de classe da classe SNMP agora está declarado.