Otros cambios

Cambios en el núcleo

Núcleo

En caso de una condición OOM (memoria agotada) grave, PHP ahora llama a abort() en lugar de a exit(1), lo que cambia el código de salida a 134 y posiblemente genera un volcado de memoria (core dump).

La constante PHP_OS_FAMILY tiene un valor AIX cuando se ejecuta en AIX o en IBM i mediante PASE.

Cambios en los módulos SAPI

CLI

El servidor de desarrollo integrado ahora acepta peticiones que utilizan el método HTTP QUERY en lugar de devolver 501 Not Implemented.

El servidor de desarrollo integrado ya no refleja la cabecera Host de las peticiones.

Funciones modificadas

Núcleo

header_register_callback() ahora declara true como tipo de retorno. No puede devolver false desde PHP 8.0.0, cuando pasar una retrollamada no válida empezó a lanzar una TypeError.

register_tick_function() ahora declara true como tipo de retorno. Siempre ha devuelto true en caso de éxito; una retrollamada no válida lanza una TypeError durante el análisis de los argumentos, antes de llegar al cuerpo de la función.

ini_get_all() ahora incluye un elemento "builtin_default_value" para cada directiva cuando details es true. Contiene el valor por defecto integrado de la directiva (o null si no tiene ninguno), independientemente de los valores definidos en php.ini, en la línea de comandos o en tiempo de ejecución.

fclose(), file_put_contents() y copy() ahora devuelven false cuando falla el vaciado o el cierre del flujo. Anteriormente, estos fallos se ignoraban silenciosamente.

Filter

El tipo de retorno de filter_var_array() se ha restringido de array|false|null a array|false. La función siempre establece un array antes de filtrar, por lo que nunca se devolvía null. filter_input_array() no se ve afectada: sigue devolviendo null cuando la superglobal solicitada no existe.

LDAP

El tipo de retorno de ldap_free_result() se ha restringido de bool a true. La función ya devolvía siempre true.

MySQLi

La estructura devuelta por mysqli_get_charset() ya no contiene el elemento no documentado "comment". El valor de "charsetnr" ahora se fija en la constante 0, ya que este número era un detalle de implementación que no debería haberse expuesto públicamente.

OpenSSL

La salida de openssl_x509_parse() ahora contiene una entrada "criticalExtensions" que enumera todas las extensiones críticas del certificado.

openssl_sign() y openssl_verify() ahora tienen un argumento opcional adicional salt_length que permite controlar la longitud de la sal de RSA-PSS cuando se utiliza OPENSSL_PKCS1_PSS_PADDING. Acepta una longitud explícita o una de las nuevas constantes OPENSSL_RSA_PSS_SALTLEN_*.

PDO_DBLIB

Al utilizar conexiones persistentes, ahora se realiza una comprobación de disponibilidad de la conexión en PDO::__construct().

Phar

Phar::mungServer() ahora soporta valores por referencia.

Readline

readline_completion_function() ahora declara true como tipo de retorno. Siempre ha devuelto true en caso de éxito; una retrollamada no válida lanza una TypeError durante el análisis de los argumentos, antes de llegar al cuerpo de la función.

Reflection

Las salidas de ReflectionClassConstant::__toString() y de ReflectionConstant::__toString() ahora muestran los valores de constantes bool como true y false en lugar de 1 y un string vacío. Esto también afecta a otras formas de mostrar las constantes de clase, p. ej. ReflectionClass::__toString().

Sockets

socket_addrinfo_lookup() ahora tiene un argumento opcional adicional error_code que, cuando no es null, recibe el código de error en caso de fallo (una de las constantes EAI_*).

El tipo de retorno de socket_cmsg_space() se ha restringido de ?int a int. Todas las rutas de fallo lanzan una ValueError desde PHP 8.0.0, por lo que nunca se devolvía null.

Zip

El tipo de retorno de zip_entry_close() se ha restringido de bool a true. La función ya devolvía siempre true.

Otros cambios en las extensiones

Fileinfo

Actualizado a file 5.48. Las bases de datos magic compiladas a medida con versiones antiguas de file deben regenerarse.

Hash

La versión incluida de xxHash se ha actualizado a 0.8.2.

MySQLi

Se ha añadido la nueva constante MYSQLI_OPT_COMPRESS.

Opcache

JIT ahora está soportado para las compilaciones ZTS en Apple Silicon.

Cambios en el manejo de ficheros INI

Núcleo

Se ha añadido la opción INI error_include_args para hacer coherente la visualización de los argumentos de las funciones en los errores; está desactivada por defecto. Anteriormente, que una función mostrara un parámetro en el error dependía de cada llamada a la función de error interna. Ahora se mostrarán todos los parámetros tal como se pasaron realmente a la función. Esto utiliza la misma infraestructura que las trazas de pila, por lo que los parámetros sensibles no se mostrarán, y los strings se truncarán según zend.exception_string_param_max_len.

MBString

La directiva INI mbstring.detect_order ahora actualiza el orden de detección interno cuando se modifica en tiempo de ejecución mediante ini_set(). Anteriormente, los cambios en tiempo de ejecución con ini_set() no surtían efecto en mb_detect_order(). Definir la directiva en null o en un string vacío en tiempo de ejecución ahora deja sin cambios el orden de detección configurado anteriormente.

MySQLi

mysqli.default_port ahora comprueba la validez del valor, que debe estar comprendido entre 0 y 65535 inclusive.

Opcache

opcache.jit_debug acepta una nueva bandera: ZEND_JIT_DEBUG_TRACE_EXIT_INFO_SRC. Cuando se utiliza junto con ZEND_JIT_DEBUG_TRACE_EXIT_INFO, el origen de los puntos de salida se imprime en la información de salida, en las compilaciones de depuración.

Rendimiento

Núcleo

printf() que utilice únicamente %s y %d se compilará como la interpolación de strings equivalente, evitando el coste de una llamada a función y del análisis repetido del string de formato.

Los argumentos ahora se pasan de forma más eficiente a los constructores conocidos (p. ej., al utilizar new self()).

array_map() que utilice como retrollamada un callable de primera clase o una aplicación parcial de función se compilará como el bucle foreach equivalente, evitando la creación de Closure intermedias y el coste de llamar a retrollamadas de usuario desde funciones internas, y ofreciendo una mejor visibilidad al JIT.

Se ha mejorado el rendimiento de la VM TAILCALL, y ahora está activada en Windows al compilar con Clang 19 o posterior en x86_64.

Se ha mejorado el rendimiento de las compilaciones ZTS.

Se ha añadido una caché de closures sin estado.

El código con recursión profunda que hace que la VM asigne nuevas páginas de pila ahora debería ser más rápido.

Se ha mejorado el rendimiento de la ordenación de arrays de un solo elemento.

Se ha mejorado el rendimiento de las siguientes funciones:

DOM

DOMText::splitText() y Dom\Text::splitText() ahora son más rápidos y consumen menos memoria.

GD

imagebmp(), imagewbmp(), imagegd() e imagegd2() ahora almacenan la salida en búfer al escribir en flujos de PHP, lo que mejora significativamente el rendimiento al escribir imágenes en ficheros.

Se ha mejorado el rendimiento de imagegrabscreen() e imagegrabwindow() en Windows.

Intl

Se ha mejorado el rendimiento de IntlCalendar::getAvailableLocales() y de IntlDateFormatter::localtime()/datefmt_localtime() mediante la preasignación de los arrays que devuelven.

Se ha mejorado el rendimiento de transliterator_list_ids() y de resourcebundle_locales() mediante la preasignación de los arrays que devuelven.

Se ha optimizado la invocación de la retrollamada en IntlChar::enumCharTypes().

JSON

Se ha mejorado el rendimiento de la codificación de arrays y objetos.

Se ha mejorado el rendimiento de la generación de la sangría en json_encode() al utilizar JSON_PRETTY_PRINT.

MBString

Se ha mejorado el rendimiento de mb_str_pad().

Phar

Se han reducido las asignaciones temporales al iterar sobre directorios Phar.

URI

Se ha mejorado el rendimiento de Uri\WhatWg\Url::parse() al recopilar errores de validación mediante la preasignación del array de errores.

Se han reducido las asignaciones al leer hosts y rutas IPv6/IPvFuture con Uri\Rfc3986\Uri.

Se ha mejorado el rendimiento y el consumo de memoria al utilizar los getters normalizadores (no sin procesar) sobre URI ya normalizadas con Uri\Rfc3986\Uri.

Zip

Se ha mejorado el rendimiento de ZipArchive::addGlob() y de ZipArchive::addPattern() mediante la preasignación de los arrays que devuelven.

Se evitan copias de strings en ZipArchive::addFromString().

+add a note

User Contributed Notes

There are no user contributed notes for this page.