A partir del día de hoy, 28 de Noviembre, tenemos disponible la versión PHP 7.4 que trae grandes novedades, características y cambios de sintaxis que aportan más poder a este lindo lenguaje.
En Laravel Tip ya hemos publicado varios artículos comentado las características que se rumoreaban. En este artículo vamos detallar cada una de las nuevas mejoras de PHP 7.4.
Lo más destacado
A continuación, listo las características mas llamativas de PHP 7.4, luego algunos cambios y cosas que quedaron fuera de soporte.
- Precarga: mejora el rendimiento notablemente.
- Propiedades tipadas en las clases.
- Arrows Functions: funciones más limpias que se realizan en una sola linea.
- Operador para asignación nula: una nueva forma de usar el operador «??»
- Guiones bajos para mejorar visualmente los números grandes.
- Mejora en la variación de tipos.
- Operador de propagación en matrices.
Precarga en PHP 7.4
Esta es una de esas características que nos gustan tanto ya que mejoran el rendimiento del lenguaje notablemente, y más aun para nosotros que utilizamos Laravel, ya que esta feature tiene una gran aplicación a la hora de utilizar frameworks.
La precarga nos permite crear un script que cargue todos los archivos que deseemos (por única vez) en la memoria del servidor y de esta forma estén disponibles en cada solicitud HTTP, rápidamente.
Lo malo, si modificamos alguno de estos archivos, debemos reiniciar el servidor.
Propiedades tipadas en la nueva versión de PHP
A partir de PHP 7.4 podremos tipar las propiedades de una clase. Y esto es una gran mejora para el lenguaje ya que será interpretado más rápido y nos brindará mas seguridad en nuestro código.
class Product { public string $name; public float $price; public ?Category $category; }
Este cambio es opcional y no afecta a versiones anterior.
Funciones simples con flecha
Creo que las «short closures» son una de las características más solicitadas por la comunidad de PHP. Y con razón, ya que mejoran mucho la legibilidad del código.
// Antes de PHP 7.4 collect($products)->filter(function (Product $product) { return $product->price > 100; }); // Ahora collect($products)->filter(fn (Product $product) => $product->price > 100);
Para los que tienen conocimientos en Python, las short closures vienen a ser las labda de PHP, funciones de una sola linea.
Lo muy bueno de esta forma de escribir funciones simples es que no es requerido usar la palabra clave use
para acceder a variables y también tenemos disponible la variable $this
dentro de las funciones con flecha.
Nuevo operador para asignación nula en PHP
En PHP 7.4 tenemos una forma de abreviar la asignación nula:
// Antes $product->name = $product->name ?? 'Default name'; // Ahora en PHP 7.4 $product->name ??= 'Default name';
Variación de tipos mejorada
Básicamente, lo que nos permite esta característica es, al sobrescribir un método, podremos modificar el tipo devuelto. Por ejemplo:
class ParentType {} class ChildType extends ParentType {} class A { public function unMetodo(): ParentType { // (...) } } class B extends A { public function unMetodo(): ChildType { // (...) } }
Y también, en los argumentos:
class A { public function unMetodo(ChildType $type) { // (...) } } class B extends A { public function unMetodo(ParentType $type) { // (...) } }
Guiones bajos para mejorar la lectura en numéricos
Esta es una funcionalidad simple pero no esta mal.
// Antes $price = 35178000.50; // Permitido en PHP 7.4 $price = 35_178_000.50;
Como podemos ver, se lee más fácil un numero largo. PHP simplemente ignorara los guiones bajos.
Operador de propagación en Matrices
En PHP 7.4 tenemos el operador de propagación disponible en las matrices. Pero solo funciona con claves numéricas.
$arrayA = [1, 2, 3]; $arrayB = [4, 5]; // Aplicando operador de propagación: $result = [0, ...$arrayA, ...$arrayB, 6 ,7]; // [0, 1, 2, 3, 4, 5, 6, 7]
Más características
Serialización personalizada en objetos
Se han agregado dos nuevos métodos mágicos: __serialize
y __unserialize
. Esto nos permitirá codificar la forma que se serializa y deserializa un objeto.
Reflexión para referencias
Las funciones dump()
y dd()
se verán afectadas (para mejor) con esta nueva característica. Estas funciones depende de la API de Reflection para imprimir correctamente las variables y su contenido. El problema venia con las variables por referencia y la librería tenia que hacer hacks para poder detectarlas.
Con la clase ReflectionReference
, añadida en PHP 7.4, se resuelve este problema.
Password Hashing Registry
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 usarlas.
Más específicamente, se ha agregado la función password_algos
que devuelve una lista de todos los algoritmos de contraseña registrados.
Cambios y características fuera de soporte
Además de las nuevas características, también hay muchos cambios en el lenguaje. La mayoría de estos cambios no rompen nuestro sistema, pero algunos podrían llegar a afectarlo.
Igualmente, debes saber PHP solo nos dará un aviso de que la funcionalidad se eliminará o cambiará en el futuro. Esto mensaje debemos darle importancia así la actualización a PHP 8 sea sin dolor de cabeza.
Eliminación de anidación continua del operador ternario
Un poco complicado el título que le puse, no? Pero básicamente es que vamos a tener que utilizar paréntesis cuando utilicemos los operadores ?:
1 ? 2 : 3 ? 4 : 5; // deprecated (1 ? 2 : 3) ? 4 : 5; // ok
Excepciones permitidas en __toString
En los métodos mágicos __toString
podremos utilizar excepciones.
Precedencia de concatenación
Si escribirías algo como esto:
echo "sum: " . $a + $b;
PHP lo interpretaría previamente así:
echo ("sum: " . $a) + $b;
PHP 8 lo hará para que se interprete así:
echo "sum :" . ($a + $b);
PHP 7.4 arrojara una advertencia cuando se encuentra con una expresión sin paréntesis que contiene un signo .
anterior a +
o -
.
Corchetes en strings o matrices
Lo siguiente ya no esta permitido:
$array{1}; $string{3};
Extención ext-hash
siempre habilitado
Esta extensión ahora está disponible permanentemente en todas las instalaciones de PHP.
PEAR no está habilitada por defecto
Como PEAR ya no se mantiene activamente, el equipo central decidió eliminar su instalación predeterminada con PHP 7.4.
Conclusión
¡Anda e instala PHP 7.4, ya! 😆
Buen resumen gracias!
Cuando dices: «La precarga nos permite crear un script que cargue todos los archivos que deseemos (por única vez) en la memoria del servidor «, por ejemplo laravel ya lo hace para su service container por ejemplo? o hay algunas recomendaciones para activar precarga en laravel?
hola Giovanny, como estas?
La precarga de PHP es distinta a lo que hace Laravel. Laravel lo que hace es «cachear» todos los datos que utiliza (configuraciones, services, etc.) en un único archivo para que el acceso sea más rápido (arma un array enorme en un único archivo, básicamente).
En cambio, la precarga de PHP lo que hace es compilar el código de los archivos que indiques en ese script. Ese código se compila una única vez (en la primer solicitud al servidor) y quedan cacheados para todas las solicitudes HTTP.
Se entiende la diferencia, mas o menos? Si no vuelve a preguntar 👍