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
?>
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.