## 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 precisa 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:

- SplFileInfo::_bad_state_ex()
- SplFileObject::getCsvControl()
- SplFileObject::fflush()
- SplFileObject::ftell()
- SplFileObject::fgetc()
- SplFileObject::fpassthru()

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.

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open