Después de un largo período de incertidumbre, los desarrolladores del lenguaje han anunciado que el lanzamiento de una nueva versión estable de PHP tendrá lugar el 26 de noviembre de 2020. La nueva versión será la 8.
Esto coincide con el ciclo habitual de 3 años de PHP. Además, en diciembre del 2019 se publicó PHP 7.4 y PHP 7.1 fue suspendido. Aun así, muchas páginas y aplicaciones web escritas en PHP utilizan aún una versión antigua, que muy pronto dejará de ser compatible. Las nuevas versiones ofrecen más variedad, el rendimiento aumenta considerablemente y el nivel de seguridad es más alto. Es por este motivo, si eres desarrollador PHP, te invito a que revises y corras a actualizar tus aplicaciones si todavía mantienes alguna versión inferior a la 7.1.
Versión estable
Esta nueva versión es versión principal, lo que significa que introducirá algunos cambios importantes, así como muchas características nuevas y mejoras de rendimiento.
Debido a estos cambios importantes, existe una gran probabilidad de que necesites realizar algunos cambios en tu código en el caso de querer realizar una migración a PHP8 y todo ejecute correctamente.
Nuevas características
Comencemos con alguna de las nuevas funciones.
Compilador JIT
La mayor novedad será el compilador JIT, que mejorará considerablemente el rendimiento. PHP no se compila, sino que se interpreta línea por línea. El compilador JIT (Just in Time) compilaría parte del código durante el tiempo de ejecución, por lo que funcionaría de manera muy similar a una versión en caché del código. Con ello, el rendimiento debería mejorar considerablemente.
El compilador JIT proporciona una mejora del rendimiento de más del 45 %.
Tipos de unión
Los union types también aparecen en otros lenguajes como C/C++, TypeScript o Haskell. Permiten crear uniones de dos o más tipos de datos, pudiéndose utilizar cualquiera de ellos. En el código, esto se vería de la siguiente manera:
Sin embargo, existe una limitación. Void no puede formar parte de un union type, ya que no devuelve ningún valor. Además, las uniones nullable pueden escribirse con |null o ?, como te mostramos en este ejemplo:
public function bar(?Bar $bar): void;
Expresión Match
Podríamos llamarlo el hermano mayor de la expresión switch. En este caso la expresión devuelve un valor, no requiere de las directivas break, utiliza comparaciones de tipo estrictas (===) y permite realizar varias comparaciones en una misma instrucción.
0 => "hello",
'1', '2', '3' => "world",
default => “Bye”
};
Nos permite tener un código más legible y limpio que la expresión switch.
::class en los objetos
En versiones anteriores se tenía que usar get_class() para asignar una clase a los objetos. Ahora se puede aplicar ::class directamente a los objetos y a las instancias de estos. Esto ayuda a mantener el código más limpio.
Expresión Throw
Esta característica hace que trhow pase de ser una declaración a una expresión, permitiéndonos utilizarla en nuevas situaciones que nos ahorran líneas de código.
$foo = $bar['offset'] ?? throw new OffsetDoesNotExist('offset');
Named arguments
Los argumentos con nombre nos permiten pasar valores a una función o constructor especificando el nombre del valor, de este modo no tendremos que tener en cuenta el orden de los parámetros y nos permite omitir parámetros opcionales.
{ /* … */ }
foo(
b: 'value b',
a: 'value a',
d: 'value d',
);
Estas características de PHP 8 están ya confirmadas, pero son solo algunas de las más relevantes y que nos proporcionarán más facilidad a la hora de realizar algunas operaciones. Aun así, se esperan más novedades durante los meses posteriores a su lanzamiento.
Para ver el listado actualizado de nuevas características de la versión puedes visitar el sitio oficial: https://wiki.php.net/rfc#php_80
Desde CLiCKO ya estamos preparando nuestros entornos para poder empezar a utilizar esta nueva versión en nuestros nuevos desarrollos, y porqué no, incluso migrar algunas de nuestras aplicaciones actuales.