Acceder al contenido principal

PHP 8 en ciernes

Volver a Blog

PHP 8 en ciernes

01 Sep 020
Logo de PHP
Ramiro J. Galayo

PHP

Tras cinco años con PHP 7 y menos de dos desde que terminase el soporte de PHP 5, PHP 8 se espera en su primera versión estable antes de fin de año, con versiones beta ya disponibles para pruebas. Te contamos algunas de sus novedades. Y dónde va a encontrar diferencias notables el común de los desarrolladores. La forma de codificar en PHP 8 incluye cambios llamativos que varían fundamentalmente la forma en la que estamos acostumbrados a programar algunos de los elementos más básicos.

 

El compilador JIT

Una de las aportaciones más significativas de PHP 8 es la inclusión de JIT. Aunque PHP es un lenguaje interpretado, JIT se encargará de transformar el código PHP a código máquina, evitando la parte de interpretación y con ello, teóricamente, mejorando el rendimiento de forma sensible.

 

Propiedades promocionadas

Hasta ahora, declarar propiedades sencillas en un objeto PHP exigía repetir sus nombres en varias líneas; la de declaración, la de los parámetros del constructor, y la de asignación:

class Point {
    public float $x;
 
    public function __construct(
        float $x = 0.0,
    ) {
        $this->x = $x;
}

En PHP 8 el código se simplifica y reduce enormemente:

class Point {
    public function __construct(
        public float $x = 0.0,
    ) {}
}

Esta publicación RFC nos explica que funciona de modo que cuando un parámetro de un método va prefijado con una palabra clave de visibilidad (public, protected o private), se considera promocionado y automáticamente aplica para él la configuración que antes hacíamos manualmente. Sin embargo, los parámetros promocionados sólo pueden utilizarse en los constructores no abstractos.

 

Union Type 2.0

Un Unyon Type acepta valores de tipos distintos, pero sólo soporta las uniones Type o null y array o Traversable. Cuando queremos aceptar otras variedades de tipos, necesitamos reiterar los tipos en anotaciones phpdoc:

class Number {
    /**
     * @var int|float $number
     */
    private $number;
 
    /**
     * @param int|float $number
     */
    public function setNumber($number) {
        $this->number = $number;
    }
 
    /**
     * @return int|float
     */
    public function getNumber() {
        return $this->number;
    }
}

Un Union Type 2.0 nos brinda la posibilidad de unir varios tipos fácilmente y prescindiendo de phpdoc:

class Number {
    private int|float $number;
 
    public function setNumber(int|float $number): void {
        $this->number = $number;
    }
 
    public function getNumber(): int|float {
        return $this->number;
    }
}

Puedes ver más información en su RFC.

 

Emparejado de expresiones

La nueva sintaxis "match expression" viene a mejorar la sintaxis de los clásicos switch. Donde un switch supone una estructura bastante barroca...

switch ($input) {
    case 'one':
        echo "uno";
        break;
    case 'some':
    case 'several':
        echo "varios";
        break;
};

Una match expression lo gestiona más elegantemente:

$status = match($input) {
    'one' => echo "uno",
    'some', 'several' => echo "varios",
};

 

Y mucho más

Estas son sólo algunas de las múltiples novedades de PHP 8. Con la llegada de la versión final de PHP 8, exploraremos otras novedades de interés, como los atributos o el uso de excepciones en expresiones.

Comentarios

Añadir nuevo comentario