## Cambios incompatibles con versiones anteriores

### Fecha

DateTime::createFromImmutable() ahora tiene un tipo de retorno provisional static, anteriormente era DateTime.

DateTimeImmutable::createFromMutable() ahora tiene un tipo de retorno provisional static, anteriormente era DateTimeImmutable.

Los símbolos `number` en los formatos relativos ya no aceptan signos múltiples, por ejemplo `+-2`.

### ODBC

La extensión ODBC ahora escapa el nombre de usuario y la contraseña en el caso donde una cadena de conexión y un nombre de usuario/contraseña son pasados, y la cadena debe ser agregada. Anteriormente, los valores de usuario que contenían valores que necesitaban ser escapados podían crear una cadena de conexión malformada o inyectar valores desde datos proporcionados por el usuario. Las reglas de escape deben ser idénticas al comportamiento de DbConnectionOptions en la BCL .NET.

### PDO_ODBC

La extensión PDO_ODBC también escapa el nombre de usuario y la contraseña cuando una cadena de conexión es pasada. Ver la modificación de la extensión ODBC para más detalles.

### Estándar

glob() ahora devuelve un array vacío si todos los caminos de acceso están restringidos por open_basedir. Anteriormente, devolvía `false`. Además, ahora se emite una advertencia incluso si solo algunos caminos están restringidos por open_basedir.

FilesystemIterator::__construct(): antes de PHP 8.2.0, la constante `FilesystemIterator::SKIP_DOTS` siempre estaba definida y no podía ser desactivada. Para conservar el comportamiento anterior, la constante debe ser definida explícitamente al usar el parámetro `flags`. El valor por defecto del parámetro `flags` no ha sido modificado.

strtolower(), strtoupper(), stristr(), stripos(), strripos(), lcfirst(), ucfirst(), ucwords(), y str_ireplace() ya no son sensibles a la configuración regional. Ahora realizan una conversión ASCII de mayúsculas y minúsculas, como si la configuración regional fuera "C". Versiones localizadas de estas funciones están disponibles en la extensión MBString. Además, array_change_key_case() y la ordenación con `SORT_FLAG_CASE` ahora también usan la conversión ASCII.

str_split() ahora devuelve un array vacío para una string vacía. Anteriormente, devolvía un array con una sola cadena vacía como entrada. mb_str_split() no se ve afectada por este cambio ya que ya se comportaba de esa manera.

ksort() y krsort() ahora realizan comparaciones numéricas de strings bajo `SORT_REGULAR` usando las reglas estándar de PHP 8.

var_export() ya no omite la barra invertida inicial para las clases exportadas, es decir, ahora están completamente calificadas.

### Biblioteca estándar de PHP (SPL)

Los siguientes métodos ahora refuerzan su firma :

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

SplFileObject::hasChildren() ahora tiene un tipo de retorno provisional false, anteriormente era bool.

SplFileObject::getChildren() ahora tiene un tipo de retorno provisional null, anteriormente era ?RecursiveIterator.

GlobIterator ahora devuelve un array vacío si todos los caminos de acceso están restringidos por open_basedir. Anteriormente, devolvía `false`. Además, ahora se emite una advertencia incluso si solo algunos caminos están restringidos por open_basedir.

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