Ha comenzado la prueba alfa de PHP 8.1

Se ha presentado la primera versión alfa de la nueva rama del lenguaje de programación PHP 8.1. El lanzamiento está previsto para el 25 de noviembre. Las principales innovaciones ya disponibles para pruebas o previstas para su implementación en PHP 8.1:

  • Se agregó soporte para enumeraciones; por ejemplo, ahora puede usar las siguientes construcciones: enum Status { case Pending; caso Activo; caso Archivado; } clase Publicación { función pública __construct( Estado privado $estado = Estado::Pendiente; ) {} función pública setStatus(Estado $estado): void { // … } } $post->setStatus(Estado::Activo);
  • Se agregó soporte para subprocesos livianos llamados Fibras que le permiten controlar la paralelización a un nivel bajo. Está previsto agregar soporte de fibra a los marcos Amphp y ReactPHP. $fibra = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('después de suspender'); // ... }); $valueAfterSuspending = $fibra->start(); $fibra->resume('después de reanudar');
  • Se ha mejorado la implementación del caché de código objeto (opcache), lo que permite almacenar en caché información sobre la herencia de clases. La optimización hizo posible aumentar el rendimiento de algunas aplicaciones entre un 5% y un 8%.
  • El operador de descompresión dentro de matrices "...$var", que permite la sustitución de matrices existentes al definir una nueva matriz, se ha ampliado para admitir claves de cadena (anteriormente solo se admitían identificadores digitales). Por ejemplo, ahora puedes usar en el código: $array1 = [“a” => 1]; $matriz2 = ["b" => 2]; $matriz = [“a” => 0, …$matriz1, …$matriz2]; var_dump($matriz); // ["a" => 1, "b" => 2]
  • Hay un nuevo tipo "nunca" que se puede utilizar para informar a los analizadores estáticos que una función finalizará la ejecución del programa, por ejemplo lanzando una excepción o ejecutando la función de salida. función dd(entrada $ mixta): nunca { salir; }
  • Se ha propuesto una nueva función array_is_list, que le permite determinar que las claves en la matriz están ordenadas en orden de valores numéricos crecientes, comenzando desde 0: $list = [“a”, “b”, “c”]; array_is_list($lista); // verdadero $notAList = [1 => “a”, 2 => “b”, 3 => “c”]; array_is_list($notALista); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // FALSO
  • Se ha propuesto la posibilidad de redefinir constantes en una clase durante el proceso de herencia. Para evitar la anulación de las constantes de la clase principal, puede utilizar la palabra clave "final". clase Foo { public const X = "foo"; const pública final Z = "foo"; } clase Bar extiende Foo { public const X = "barra"; }
  • Las funciones fsync y fdatasync se proponen para forzar que los cambios se guarden desde la caché del disco. $archivo = fopen("muestra.txt", "w"); fwrite($archivo, "Algunos contenidos"); if (fsync($file)) { echo "El archivo se ha persistido exitosamente en el disco."; } fclose($archivo);
  • Se agregó la capacidad de usar los prefijos "0o" y "0O" para números octales, además del prefijo "0" usado anteriormente. 016 === 0o16; // verdadero 016 === 0O16; // verdadero
  • Se propone limitar selectivamente el uso de $GLOBALS, lo que provocará una violación de la compatibilidad con versiones anteriores, pero permitirá acelerar significativamente las operaciones con matrices. Por ejemplo, se está considerando la posibilidad de deshabilitar la escritura en $GLOBALS y pasar $GLOBALS por puntero. Un análisis de 2000 paquetes mostró que sólo 23 de ellos se verían afectados por este cambio. Por ejemplo, si se aprueba la propuesta, 8.1 ya no admitirá expresiones como: $GLOBALS = []; $GLOBALES += []; $GLOBALES =& $x; $x =& $GLOBALES; desarmado($GLOBALS); by_ref($GLOBALS);
  • Se continuó trabajando en la transferencia de funciones del uso de recursos a la manipulación de objetos. Las funciones finfo_* e imap_* se han transferido a objetos.
  • Pasar valores nulos como argumentos a funciones internas marcadas como no anulables ha quedado obsoleto. En PHP 8.1, el uso de construcciones como str_contains("string", null) generará una advertencia y en PHP 9, un error.
  • Se agregó soporte para los algoritmos hash MurmurHash3 y xxHash.

Fuente: opennet.ru