PHP: Todo lo que debes saber sobre la nueva actualización
La nueva versión de PHP 8.1, que ya funciona en nuestro hosting compartido, nos trae novedades importantes, nuevas funciones y un rendimiento optimizado. Mejora la anterior y está disponible en su página oficial desde el 25 de noviembre de 2021.
Esta versión proporciona mejoras en el sistema de tipos y busca garantizar el comportamiento de todo elemento de una aplicación ante cualquier situación de uso, por incorrecta o imprevisible que ésta pueda parecer, también llamado “Programación defensiva”.
Aspectos más destacados de PHP 8.1
La nueva versión añade funciones como Enums y Fibers, que dan un paso importante hacia las aplicaciones PHP concurrentes, y que sitúa al lenguaje más allá del patrón tradicional de solicitud-respuesta.
Enums
Enum para abreviar o “Enumeraciones”, es un tipo enumerado que tiene un número fijo de posibles valores.
Imaginemos una baraja de cartas con oros, copas, espadas y bastos, siendo estos palos los cuatro fijos de la baraja.
Con Enum, los palos los podemos enumerar de este modo en PHP:
enum Palo { case Copas; case Espadas; case Bastos; case Oros; }
Con Palo Enum, se puede aplicar tipos al aceptar o devolver un valor de palo de este modo:
function elige_carta(Palo $palo) {}
elige_carta (Palo::Copas); elige_carta (Palo::Espadas); elige_carta (Palo::Bastos); elige_carta (Palo::Oros);
Las enumeraciones hacen que el código se lea mejor e impiden un estado inesperado de la aplicación.
Fibers
Otra de las novedades de PHP 8.1 está en Fibers, una función que permite que el código PHP se ejecute en un hilo concurrente con la capacidad de pausar y reanudar código a voluntad.
Fiber conserva su propia pila (variables y estado) y, junto con el código principal, puede suspender, iniciar, o terminar de forma recíproca.
Con Fibers, el bloque de código que está dentro de éste puede suspenderlo, devolver cualquier dato al programa principal y reanudar Fiber en el punto que se detuvo.
Lo significativo es que la ejecución concurrente no indica ejecución simultánea. Fiber no permite por sí mismo una ejecución simultánea de varios Fibers. Sin embargo, es un recurso para que los marcos PHP simultáneos administren de forma efectiva su pila de ejecución y permitan la ejecución simultánea.
Propiedades Readonly
PHP 8.1 incluye soporte para propiedades readonly (solo lectura). Una vez declaradas solo pueden ser inicializadas una vez y no se puede modificar nunca su valor, porque si lo hacemos se produciría una excepción de error.
Un ejemplo sería el siguiente:
class Test { public readonly string $Arsys;
public function __construct(string $Arsys) { // Legal initialization. $this->Arsys= $Arsys; } }
La propiedad readonly ofrece una gran garantía de firmeza; sin embargo, su uso puede no ser la mejor opción en algunos casos concretos. Por ejemplo, solo se puede utilizar junto a una propiedad tipificada porque las declaraciones sin tipo son expresamente null y no pueden ser readonly.
Mejoras en el sistema de tipos
Se continúa añadiendo sintaxis y funciones para escribir aplicaciones más defensivas y tipificadas. Lo que puede significar que la nueva versión agregará nuevos avisos de alerta cuando las aplicaciones heredadas contengan firmas que no coinciden para las clases.
Never return type (tipo de retorno)
Never es un nuevo tipo de retorno añadido como novedad de PHP 8.1. Una función/método que se declara con el tipo de retorno never indica que nunca tendrá un valor return y siempre arrojará una excepción o terminará con una llamada die/exit.
Never es similar al tipo de retorno void, pero el never garantiza que el programa terminará o se lanzará.
function redirect(string $url): never { header('Location: ' . $url); exit(); }
Constantes de clase final
De las novedades más destacadas de la versión PHP 8.1 encontramos una que añade soporte para una nueva flag llamada final y que se utilizará para las constantes de clase. Las constantes de clase final no se pueden modificar, ni siquiera mediante la herencia, por lo tanto, tampoco pueden ser ampliadas ni anuladas las subclases.
Nuevos algoritmos hash
Otra de las novedades PHP 8.1 es que añade soporte para los algoritmos hash xxHash y MurMurHash3. Son dos de los algoritmos de hashing más rápidos y que pueden engullir datos fácilmente, casi a la misma velocidad de cualquier medio de almacenamiento. Estos algoritmos están ya incluidos por defecto en la librería estándar de PHP.
Mejoras de rendimiento con Inheritance Cache
Inheritance Cache es una nueva mejora a opcache que suprime la sobrecarga de la herencia de clases de PHP.
Al ocurrir una sola vez, la herencia requiere menos instrucciones. Lo que hace es vincular las clases dependientes únicas (padre, interfaces, rasgos, tipos de propiedades, métodos) y almacenar en la memoria compartida opcache los resultados.
Esto promete importantes mejoras de rendimiento y se habla de un incremento de hasta un 8%, lo que tendría que confirmarse realizando benchmarks de PHP.