¡PHP 7.4 ya está Disponible!, Entérate de todo lo nuevo

Spread the love

PHP 7.4 ya esta aqui y disponible desde hoy, creo que es una de las versiones mas esperadas por el asunto de los closure de una linea (Arrow Functions), el uso de propiedades tipadas (Typed properties) en las clases, entre otras cosas que veremos con un poco mas detalle en este articulo.

¿Qué Hay de Nuevo en PHP 7.4?

En este articulo solo voy a cubrir las novedades que considero importantes y que creo que puedes utilizar de forma inmediata en el día a día.

Si quieres conocer todos los detalles incluyendo lo que va a dejar de usarse (Deprecate), es siempre recomendable que veas la documentación.

Propiedades de tipo (Typed properties)

A partir de esta versión va a ser posible que tengamos propiedades “tipadas”, Así que ahora este código es valido.

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

El ejemplo anterior hará que a $user->id sólo se le puedan asignar valores enteros y a $user->name sólo se le pueden asignar valores de cadena.

Funciones de flecha (Arrow functions)

Creo que esta es una de las características mas esperadas y que se solicito mucho, y sirve para evitar que las funciones anónimas no ocupen mucho espacio visual cuando son de una sola linea.

Así que una declaración como la siguiente

$factor = 10;

$nums = array_map(function($n) use($factor){
    return $n * $factor;
}, [1, 2, 3, 4]);

Se puede escribir como sigue en php 7.4

$factor = 10;
$nums = array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);

Es importante destacar que no requieres usar use cuando haces uso de las funciones de flecha.

Variación de tipos mejorada ( Limited return type covariance and argument type contravariance )

Esta característica afecta la herencia de clases e interfaces y básicamente permite que una clase hija o subtipo, pueda cambiar el tipo de retorno por uno mas especifico y en los parámetros por un tipo mas general.

Un ejemplo de esto es el siguiente código, que ahora es valido

class A {}
class B extends A {}

class Producer {
    public function method(): A {}
}
class ChildProducer extends Producer {
    public function method(): B {}
}

Esta novedad vale la pena verla con mas detalle, así que lo veremos en articulo mas adelante.

Operador de Asignación de Unión Nula (Null coalescing assignment operator)

Este operador es un conveniencia para los casos en lo que se requiere asignar un valor a una variable no esta establecida

if (!isset($array['key'])) {
    $array['key'] = computeDefault();
}

//Usando el operador
$array['key'] ??= computeDefault();

Expansión dentro de arreglos (Unpacking inside arrays)

Ahora es posible desempacar arreglos dentro de otros arreglos usando el operador (…).

$array1 = [3,4];
$array2 = [5,6,7,8,9];
$array3 = [1,2, ...$array1, ...$array2, 10];

Separador literal numérico (Numeric literal separator)

Esto nos permite mejorar la lectura de valores numéricos largos, mediante el uso de guiones bajos.

El ejemplo deja muy claro su utilidad.

6.674_083e-11; // float
299_792_458;   // decimal
0xCAFE_F00D;   // hexadecimal
0b0101_1111;   // binary

Referencias débiles ( Weak references )

Las referencias débiles permiten al programador mantener una referencia a un objeto y que esta referencia no impida que el objeto sea destruido.

Esta es una característica bien interesante, les dejo un ejemplo del autor que ilustra su uso.

$object = new stdClass;
$weakRef = WeakReference::create($object);

var_dump($weakRef->get());
unset($object);
var_dump($weakRef->get());

La segunda llamada de var_dump regresa null ya que el objeto fue borrado por el recolector de basura de PHP.

Permitir excepciones en función __toString (Allow exceptions from __toString())

Ahora se permite lanzar excepciones en la función magica __toString(). Anteriormente esto resultaba en un error fatal.

Conclusión

Hasta aquí creo que cubrimos las novedades mas importante de esta versión de PHP, como lo comente al inicio algunas de estas nuevas característica vale la pena tratarlas aparte así que estaré escribiendo de esto en el futuro.

Para finalizar comparte este articulo o deja tu comentario!.