Alterações incompatíveis com versões anteriores

Data

DateTime::createFromImmutable() agora possui um tipo de retorno provisório static, que anteriormente era DateTime.

DateTimeImmutable::createFromMutable() agora possui um tipo de retorno provisório static, que anteriormente era DateTimeImmutable.

number em relative formats não mais aceita números com mais de um sinal, por exemplo +-2.

ODBC

Agora a extensão ODBC escapa o nome de usuário e a senha quando ambos uma string de conexão e nome de usuário/senha são fornecidos e a string precise ser acrescentada. Antes, valores dados pelo usuário contendo valores que necessitassem ser escapados poderiam criar uma string de conexão malformada ou injetar valores a partir de dados providos pelo usuário. As regras de escape devem ser idênticas às do comportamento do DbConnectionOptions do .NET BCL.

PDO_ODBC

A extensão PDO_ODBC também escapa o nome de usuário e senha quando uma string de conexão é fornecida. Veja a mudança na extensão ODBC para mais informações.

Biblioteca Padrão

glob() agora devolve um array vazio se todos os caminhos forem restringidos por open_basedir. Anteriormente, o valor devolvido era false. Além disso, agora um aviso é emitido mesmo quando apenas alguns caminhos sejam restringidos por open_basedir.

FilesystemIterator::__construct(): anteriormente ao PHP 8.2.0, FilesystemIterator::SKIP_DOTS sempre estava ativa e não podia ser desativada. Para manter a preservar o comportamento anterior, a constante deve ser informada explicitamente quanto utilizando o parâmetro flags. O valor padrão de flags não foi modificado.

strtolower(), strtoupper(), stristr(), stripos(), strripos(), lcfirst(), ucfirst(), ucwords(), e str_ireplace() não são mais sensíveis à localização. Elas agora realizam conversão de caixa em ASCII, como se a localização fosse "C". Versões localizadas dessas funções estão disponíveis na extensão MBString. Além disso, array_change_key_case() e ordenações com SORT_FLAG_CASE agora também usam conversão de caixa em ASCII.

str_split() agora devolve um array vazio para uma string vazia. Anteriormente era devolvido um array com uma única string vazia como elemento. mb_str_split() não é afetada por essa mudança, visto que tal função já se comportava dessa maneira.

ksort() e krsort() agora fazem comparação de string numérica sob SORT_REGULAR utilizando as regras de PHP 8 padrão.

var_export() deixou de omitir a contrabarra final em classes exportadas, ou seja, agora os nomes de classes estarão completamente qualificados.

Biblioteca Padrão do PHP (SPL)

Agora os seguintes métodos obrigam sua assinatura:

SplFileObject::hasChildren() agora possui um tipo de retorno provisório false, que anteriormente era bool.

SplFileObject::getChildren() agora possui um tipo de retorno provisório null, que anteriormente era ?RecursiveIterator.

GlobIterator agora devolve um array vazio se todos os caminhos forem restringidos por open_basedir. Anteriormente o valor devolvido era false. Além disso, agora um aviso é emitido mesmo quando apenas alguns caminhos sejam restringidos por open_basedir.