PHP 8.1

De Wiki Proyectos Beta
Ir a la navegación Ir a la búsqueda

Descripción

PHP 8.1 trae novedades importantes, nuevas funciones y un rendimiento optimizado. Mejora la versión anterior y está disponible en su página oficial desde el 25 de noviembre de 2021.

Nuevas características

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.

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;
     }
 }

Nuevos algoritmos hash

PHP 8.1 añade soporte para los algoritmos de hash MurmurHash3 y xxHash. No están diseñados para su uso criptográfico, pero aún así proporcionan una impresionante aleatoriedad, dispersión y unicidad de salida.

Estos nuevos algoritmos de hashing son más rápidos que la mayoría de los algoritmos de hashing existentes en PHP. De hecho, algunas de las variantes de estos algoritmos hash son más rápidas que el rendimiento de la memoria RAM.

Nueva función array_is_list

Los arrays de PHP pueden contener claves tanto enteras como de cadena. Esto significa que puedes usarlos para varias cosas, incluyendo listas, tablas hash, diccionarios, colecciones, pilas, colas y mucho más. Incluso puede tener arrays dentro de arrays, creando arrays multidimensionales.

Se puede comprobar eficazmente si una entrada concreta es un array, pero no es tan fácil comprobar si le faltan desplazamientos de array, claves desordenadas, etc. En resumen, no puedes verificar rápidamente si un array es una lista.

La array_is_list() function comprueba si las claves de un array están en orden secuencial empezando por 0, y sin espacios. Si se cumplen todas las condiciones, devolverá true. Por defecto, también devuelve true para arrays vacíos.

Ejemplos

// true array_is_list() ejemplos
var_dump(array_is_list([]));                            // true
var_dump(array_is_list([1, 2, 3]));                     // true
var_dump(array_is_list(['gatos', 2, 3]));               // true
var_dump(array_is_list(['gatos', 'perros']));           // true
var_dump(array_is_list([0 => 'gatos', 'perros']));      // true
var_dump(array_is_list([0 => 'gatos', 1 => 'perros'])); // true 
// false array_is_list() ejemplos 
var_dump(array_is_list([1 => 'gatos', 'perros']));              // as first key isn't 0
var_dump(array_is_list([1 => 'gatos', 0 => 'perros']));         // keys are out of order
var_dump(array_is_list([0 => 'gatos', 'duck' => 'perros']));    // non-integer keys
var_dump(array_is_list([0 => 'gatos', 2 => 'perros']));         // gap in between keys