Nuevas características
Núcleo de PHP
Propiedades tipadas
Las propiedades de las clases ahora soportan la declaración de tipos.
El ejemplo anterior asegura que
$user->id solo puede
recibir valores de tipo
int y
$user->name solo puede recibir valores de tipo
string.
Funciones flecha
Las funciones flecha proporcionan
una sintaxis corta para definir funciones que enlazan el ámbito por valor de manera implícita.
Tipo de retorno covariante y tipo de argumento contravariante limitado
El siguiente código ahora funcionará:
El soporte de varianza total solo está disponible cuando se utiliza la carga automática. En un único fichero solo son posibles referencias de tipos no cíclicos, ya que todas las clases deben estar disponibles antes de ser referenciadas.
Operador de asignación de fusión Null
Desempaquetado en los arrays
Separador numérico literal
Los números literales pueden contener un carácter de subrayado entre
los dígitos.
Referencias débiles
Las referencias débiles permiten al desarrollador retener una referencia
a un objeto que no impide que el objeto sea destruido.
Permitir Excepciones desde __toString()
Lanzar excepciones desde __toString()
ahora está permitido. Anteriormente, esto resultaba en un error fatal.
Los errores fatales recuperables en las conversiones de string han sido
convertidos en excepciones Error.
CURL
CURLFile ahora soporta las envolturas de flujo
además de los nombres de ficheros brutos, si la extensión ha sido compilada con libcurl
>= 7.56.0.
FFI
FFI es una nueva extensión, que proporciona una manera sencilla de llamar
a las funciones nativas, acceso nativo a las variables, y la creación/acceso a
estructuras de datos definidas en bibliotecas C.
GD
Se ha añadido el filtro de imagen IMG_FILTER_SCATTER
para aplicar un filtro de dispersión a las imágenes.
Hash
Se ha añadido el hash crc32c utilizando el polinomio de Castagnoli.
Esta variante de CRC32 es utilizada por sistemas de almacenamiento, tales como
iSCSI, SCTP, Btrfs y ext4.
Cadenas multioctetos
Se ha añadido la función mb_str_split(), que proporciona la misma
funcionalidad que str_split(), pero opera sobre puntos de código en lugar de octetos.
PDO
El nombre de usuario y la contraseña ahora pueden ser especificados como
parte del DSN PDO para los controladores mysql, mssql, sybase, dblib, firebird
y oci. Anteriormente, esto solo era soportado para el controlador pgsql.
Si un nombre de usuario/contraseña es definido tanto en el
constructor como en el DSN, el constructor tiene precedencia.
Ahora es posible escapar los signos de interrogación en las consultas SQL para evitar que sean interpretados como parámetro ficticio.
Escribir ?? permite enviar un solo signo de interrogación
a la base de datos y, por ejemplo, utilizar el operador PostgreSQL JSON
para saber si una clave existe (?).
PDO_SQLite
PDOStatement::getAttribute(PDO::SQLITE_ATTR_READONLY_STATEMENT)
permite verificar si la declaración es de solo lectura, es decir, si no
modifica la base de datos.
PDO::setAttribute(PDO::SQLITE_ATTR_EXTENDED_RESULT_CODES, true)
activa el uso de códigos de resultados extendidos en
PDO::errorInfo() y
PDOStatement::errorInfo().
SQLite3
Se ha añadido SQLite3::lastExtendedErrorCode()
para recuperar el último código extendido del resultado.
Se ha añadido SQLite3::enableExtendedResultCodes($enable = true),
que hará que SQLite3::lastErrorCode() devuelva códigos de resultados extendidos.
Estándar
Serialización personalizada de objetos
Se ha añadido un nuevo mecanismo de serialización personalizada de objetos,
que utiliza dos nuevas métodos mágicos:
__serialize y __unserialize.
El nuevo mecanismo de serialización sucederá a la interfaz
Serializable, que será obsoleto en el futuro.
Las funciones array merge sin argumentos
array_merge() y array_merge_recursive()
ahora pueden ser llamadas sin argumentos, en cuyo caso
devolverán un array vacío. Esto es útil en conjunción con el operador
de descomposición, por ejemplo array_merge(...$arrays).
proc_open() ahora acepta un array en lugar de una
string para la comanda. En este caso, el proceso se abre directamente
(sin pasar a través de un shell) y PHP se encargará de escapar los argumentos
cuando sea necesario.
proc_open() ahora soporta los descriptores
redirect y null.
argon2i(d) sin libargon
password_hash() ahora tiene las implementaciones de
argon2i y argon2id de la extensión sodium cuando PHP es compilado sin libargon.