El desarrollo de PHP no para y las versiones nuevas se suceden una tras otra. La siguiente, la versión 7.4,  se espera para dentro de unos pocos días ─28 de noviembre─ y ya está la lista de cambios al completo.

Entre las novedades destacan las siguientes:

Novedades incluidas en PHP 7.4

Arrow functions

Al fin llegan a PHP las short functions o arrow functions. Estos básicamente funcionan como los closures aunque tienen algunas peculiaridades.

$factor = 2;

// Antes de PHP 7.4
array_map(function($n) use ($factor) {
	return $n * $factor;
    }, [1, 2, 3, 4]);

// Usando arrow functions
array_map(fn($n) => $n * $factor, [1, 2, 3, 4]);

Como vemos, las arrow function no solo son más cortas y legibles sino que además nos permiten acceder a las variables presentes en ejecución sin tener que pasarlas una a una por el use de la función.

Propiedades de clases tipadas

El tipado en PHP sigue extendiéndose y ahora llega a las propiedades de las clases. A partir de esta versión podremos hacer cosas como las siguientes:

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

Estos son los tipos disponibles para las propiedades:

  • Int
  • Float
  • String
  • Iterable
  • Array
  • Object
  • Self
  • Parent
  • Bool

Básicamente son todos los tipos disponibles hasta ahora a excepción del tipo callable (funciones) y el tipo void.

Operador de asignación nulo

El operador de "coalescencia nula" o null coalescing operator aparece en PHP 7.0 y ahora se extiende con opciones de asignación.

// PHP 7.4
// $name cogerá el valor "Víctor" si, llegados a este punto, su valor es
// nulo o no esta seteado.
$name ??= "Víctor";

// Versiones anteriores
$name = isset($name) ? $name : "Víctor";

Operador para desempacar arrays

Este operador lleva presente en PHP un par de versiones pero, hasta ahora, solo podíamos usarlo en métodos de las funciones. En esta versión se extiende a los arrays.

$a = [2, 3];
$b = [1, ...$a, 4, 5, 6];
// $b = [1, 2, 3, 4, 5, 6]

Barra baja para formatear números

PHP acepta algunos caracteres no numéricos a la hora de formatear un número y ahora se extiende añadiendo la barra baja ( _ ). Los siguientes ejemplo son números válidos en la versión 7.4 y serían errores de tipado en versiones anteriores.

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

Serialización de objetos personalizada

Esto es una pequeña maravilla que no puede pasar desapercibida.

En esta versión se incorporan dos métodos mágicos para extender y personalizar la serialización y deserialización de nuestros objetos.

<?php

// Devuelve una representación en array de este objeto
public function __serialize(): array;

// A partir de un array, recrea el objeto
public function __unserialize(array $data): void;

Más novedades

En el sitio oficial de PHP puedes encontrar la lista completa de cambios que introduce esta nueva versión del lenguaje.