## Modifications entrainant une incompatibilité ascendante

### Date

DateTime::createFromImmutable() a désormais un type de retour provisoire static, auparavant c'était DateTime.

DateTimeImmutable::createFromMutable() a désormais un type de retour provisoire static, auparavant c'était DateTimeImmutable.

Les symboles numériques dans les formats relatifs n'acceptent plus les signes multiples, par exemple `+-2`.

### ODBC

L'extension ODBC échappe désormais le nom d'utilisateur et le mot de passe dans le cas où une chaîne de connexion et un nom d'utilisateur/mot de passe sont transmis, et que la chaîne doit être ajoutée. Auparavant, les valeurs utilisateur contenant des valeurs nécessitant un échappement pouvaient créer une chaîne de connexion malformée ou injecter des valeurs à partir de données fournies par l'utilisateur. Les règles d'échappement devraient être identiques au comportement de DbConnectionOptions dans la BCL .NET.

### PDO_ODBC

L'extension PDO_ODBC échappe également le nom d'utilisateur et le mot de passe lorsqu'une chaîne de connexion est transmise. Voir la modification de l'extension ODBC pour plus de détails.

### Standard

glob() retourne désormais un tableau vide si tous les chemins d'accès sont restreints par open_basedir. Auparavant, elle retournait `false`. De plus, un avertissement est désormais émis même si seulement quelques chemins sont restreints par open_basedir.

FilesystemIterator::__construct(): antérieur à PHP 8.2.0, le constante `FilesystemIterator::SKIP_DOTS` était toujours définie et ne pouvait pas être désactivée. Afin de conserver le comportement précédent, la constante doit être explicitement définie lors de l'utilisation du paramètre `flags`. La valeur par défaut du paramètre `flags` n'a pas été modifiée.

strtolower(), strtoupper(), stristr(), stripos(), strripos(), lcfirst(), ucfirst(), ucwords(), et str_ireplace() ne sont plus sensibles à la locale. Elles effectuent désormais une conversion ASCII de la casse, comme si la locale était "C". Des versions localisées de ces fonctions sont disponibles dans l'extension MBString. De plus, array_change_key_case() et le tri avec `SORT_FLAG_CASE` utilisent désormais également la conversion ASCII.

str_split() retourne désormais un tableau vide pour une chaîne de caractères vide. Auparavant, elle retournait un tableau avec une seule chaîne vide comme entrée. mb_str_split() n'est pas affectée par ce changement car elle se comportait déjà de la sorte.

ksort() et krsort() font désormais des comparaisons numériques de chaînes de caractères sous `SORT_REGULAR` en utilisant les règles standards de PHP 8.

var_export() n'omet plus le backslash de tête pour les classes exportées, c'est-à-dire qu'elles sont désormais pleinement qualifiées.

### Bibliothèque standard de PHP (SPL)

Les méthodes suivantes enforcent désormais leur signature :

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

SplFileObject::hasChildren() a désormais un type de retour provisoire false, auparavant c'était bool.

SplFileObject::getChildren() a désormais un type de retour provisoire null, auparavant c'était ?RecursiveIterator.

GlobIterator retourne désormais un tableau vide si tous les chemins d'accès sont restreints par open_basedir. Auparavant, elle retournait `false`. De plus, un avertissement est désormais émis même si seulement certains chemins sont restreints par open_basedir.