¿Qué hay de nuevo en PHP 7.4?

PHP 7.4 es la versión estable actual, se trata de la versión de PHP que recomendamos utilizar pues mejora notablemente el rendimiento y la seguridad respecto a versiones anteriores. En este post, explicaremos algunas de las funciones y actualizaciones de PHP 7.4 recientemente introducidas. Recuerda que desde el panel de gestión de tu alojamiento en DonDominio puedes cambiar la versión de PHP en cualquier momento.

Nuevas características

  • Funciones flecha (arrow functions) para crear funciones de una línea más limpias.
  • Precarga para mejoras de rendimiento.
  • Propiedades escritas en clases.
  • El operador de asignación de función nula como abreviatura.
  • Los guiones bajos se pueden usar para formatear valores numéricos.
  • Operador extendido en matrices.
  • Y más características que explicaremos a continuación…

Funciones Flecha (RFC)

Las funciones flecha permiten funciones de una línea menos detalladas.


// En vez de:

array_map(function (User $user) { 
    return $user->id; 
}, $users)

// Puedes hacer esto:

array_map(fn (User $user) => $user->id, $users)


Hay algunos puntos a destacar sobre las funciones flecha:

  • Siempre pueden acceder al ámbito principal, no hay necesidad de usar palabras clave.
  • El carácter $ no está disponible al igual que los cierres normales.
  • Las funciones flecha solo pueden contener una línea, que también es la declaración de retorno.

Propiedades tipificadas (RFC)

Las declaraciones de tipo argumento o sugerencias de tipo, permiten especificar el tipo de variable que se espera pasar a una función o un método de clase. Ahora con PHP 7.4 se da un paso adelante al agregar soporte para declaraciones de tipo de propiedad de primera clase.


// Ejemplo:

class User {
	public int $id;
	public string $name;
}


Operador de asignación de fusión nulo (RFC)

Se trata de una abreviatura para operaciones de fusión nulas


// En vez de:

$data['date'] = $data['date'] ?? new DateTime();

// Puedes hacer esto:

$data['date'] ??= new DateTime();

Operador extendido en matrices (RFC)

Será posible usar el operador de propagación en matrices.


// Ejemplo:

$arrayA = [1, 2, 3];

$arrayB = [4, 5];

$result = [0, ...$arrayA, ...$arrayB, 6 ,7];

// [0, 1, 2, 3, 4, 5, 6, 7]

Debes tener en cuenta que esto solo funciona con matrices de claves numéricas.

Separador literal numérico (RFC)

PHP 7.4 permite utilizar guiones bajos para separar visualmente valores numéricos.


// Ejemplo:

$unformattedNumber = 107925284.88;

$formattedNumber = 107_925_284.88;

Los guiones bajos son simplemente ignorados.

Perecarga (RFC)

Es una adición que puede resultar en mejoras significativas de rendimiento.

Si estás utilizando un frame, los archivos deben cargarse y vincularse en cada solicitud. La precarga permite al servidor cargar archivos PHP en la memoria de inicio y tenerlos disponibles permanentemente para todas las solicitudes posteriores.

La mejora de rendimiento tiene también un costo: si se cambia la fuente de los archivos precargados, el servidor debe reiniciarse.

Serialización de objetos personalizados (RFC)

Se han agregado dos nuevos métodos: __serialize y __useralize. La diferencia entre estos métodos and__sleep y and__wakeup es discutida en el RFC.

Reflexión para referencias (RFC)

Las bibliotecas como el dumper var de Symfony dependen en gran medida de la API de reflexión para volcar información confiable en una variable. Anteriormente no era posible reflejar adecuadamente las referencias, lo que resultaba en que estas bibliotecas dependían de hacks para detectarlas.

En PHP 7.4 se ha agregado la clase ReflectionReference que resuelve el problema.

Referencias débiles (RFC)

PHP 7.4 introduce la clase WeakReference, que permite a los programadores retener una referencia a un objeto que no impide que el objeto en si sea destruido.

mb_str_split agregado al RFC

Esta función proporciona la misma funcionalidad que str_split pero en cadenas de varios bytes.

Registro de hash de contraseña (RFC)

Se han realizado cambios internos en la forma en que se utilizan las bibliotecas de hash para que sea más fácil para el usuario poder usarlas.

Más específicamente, se ha agregado una nueva función: password_algos que devuelve una lista de todos los algoritmos de contraseña registrados.

Cambios y deprecaciones

Además de las nuevas características, también hay muchos cambios. La mayoría de estos cambios no son «rompe códigos», aunque algunos de ellos podrían tener un efecto en la base del código.

Ten en cuenta que las advertencias por deprecación son un aviso al desarrollador de que la funcionalidad se eliminará o cambiará en un futuro. Es importante no ignorar las advertencias e intentar corregirlo de inmediato, ya que hará que las actualizaciones a nuevas versiones sea más fácil.

Deprecación del operador ternario asociativo a la izquierda (RFC)

El operador ternario tiene algunas peculiaridades extrañas en PHP. Este RFC agrega una advertencia de desuso para declaraciones ternarias anidadas.


1 ? 2 : 3 ? 4 : 5;   // deprecado
(1 ? 2 : 3) ? 4 : 5; // correcto

Excepciones permitidas en __toString (RFC)

Anteriormente no se podían lanzar excepciones en __toString.

Este comportamiento ahora se ha cambiado y se pueden lanzar excepciones desde __toString.

Precedencia de concatenación (RFC)

Si escribías algo como:


echo "sum: " . $a + $b;

PHP lo interpretaria previamente como:


echo ("sum: " . $a) + $b;

Ahora con PHP 7.4 agrega una advertencia de desaprobación cuando encuentra una expresión sin paréntesis que contiene un . antes de un signo + o –

array_merge sin argumentos (Actualización)

Desde la adición del operador de propagación, puede haber casos en los que desees utilizar array_merge de esta manera:


$merged = array_merge(...$arrayOfArrays);

Para el caso límite donde $arrayOfArrays estaría vacío, tanto array_merge como array_merge_recursive ahora permiten una lista de parámetros vacía. Se devolvería una matriz vacía si no se envío ninguna entrada.

Brackets para acceso a matriz y cadena (RFC)

En versiones anteriores era posible acceder a matrices y compensaciones de cadenas usando brackets:


$array{1};
$string{3};

En PHP 7.4 ha sido deprecado.

Avisos de acceso a arreglos no válidos (RFC)

Si tuvieras que usar la sintaxis de acceso a la matriz en un entero, PHP anteriormente devolvería nulo. A partir de PHP 7.4, se emitirá un aviso.


$i = 1;

$i[0]; // Notice

Mejoras de proc_open (Actualización)

Se realizaron cambios en proc_open para que puedan ejecutar programas sin pasar por un shell. Esto se hace pasando una matriz en lugar de una cadena para el comando.

ext-hash siempre habilitado (RFC)

Esta extensión ahora está disponible permanentemente en todas las instalaciones de PHP.

Mejoras a password_hash (RFC)

Es un pequeño cambio que agrega una gran compatibilidad con el hash argon2i y argon2id cuando se compila PHP sin libargon.

PEAR no habilitada por defecto

Debido a que PEAR ya no se mantiene activamente, se ha decidido eliminar su instalación por defecto con PHP 7.4.

Depreciaciones (RFC)

Este RFC agrupa muchas pequeñas deprecaciones, a continuación puedes ver una lista:

  • Magic quotes
  • array_key_exists() con objetos
  • Filtro FILTER_SANITIZE_MAGIC_QUOTES
  • Métodos de reflexión export()
  • mb_strrpos() con codificación como tercer argumento
  • Mezcla de orden de parámetro implode()
  • Desligar $this desde cierres no estáticos
  • Función hebrevc()
  • Función convert_cyr_string()
  • Función money_format()
  • Función ezmlm_hash()
  • Función restore_include_path()
  • allow_url_include directiva ini

Otros cambios (Actualización)

  • Llamar a parent:: en una clase sin un padre está deprecado.
  • Llamar a var_dump en una instancia de DateTime o DateTimeImmutable ya no dejará propiedades accesibles en el objeto.
  • openssl_random_pseudo_bytes lanzará una excepción en situaciones de error.
  • Intentar serializar una instancia PDO o PDOStatement generará una excepción en lugar de una PDOException.
  • Llamar a get_object_var () en una instancia de ArrayObject devolverá las propiedades del ArrayObject en sí, y no los valores de la matriz u objeto envuelto. Tenga en cuenta que los moldes (array) no se ven afectados.
  • ext/wwdx ha quedado deprecado.

Nota final

En este post hemos tratado algunos de los temas más importantes de PHP 7.3, si quieres ver toda la información sobre las actualizaciones puedes acceder a la página de php.net.

¿Buscas alojamiento para tu web?

Consulta nuestros planes: