Se ha presentado la primera versión alfa de la nueva rama del lenguaje de programación PHP 8.4. El lanzamiento está programado para el 21 de noviembre. Las principales novedades, ya disponibles para pruebas o previstas para su implementación en PHP 8.4:
- Se ha añadido soporte para adjuntar controladores de propiedades (property hook), que permiten agregar lógica adicional que se ejecuta al modificar o acceder a las propiedades de un objeto, implementándose sin interceptar las operaciones de lectura y escritura mediante las funciones comunes __get y __set, y sin crear métodos adicionales de envoltura. El uso de controladores de propiedades permite reducir significativamente el volumen de código y simplificar la redefinición del comportamiento de las propiedades, gracias a la vinculación de su propio controlador a cada propiedad. class User { public string $name { set { if (strlen($value) === 0) { throw new ValueError('El nombre debe ser no vacío'); } $this->name = $value; } } public function __construct(string $name) { $this->name = $name; } }
- Se permite indicar referencias a métodos en la construcción 'new' sin paréntesis separadores, es decir, en lugar de '$name = (new MyClass())->method()' ahora se puede indicar '$name = new MyClass()->method()'.
- En lugar del parámetro general 'opcache.jit_buffer_size' para gestionar el compilador JIT y configurar el tamaño del búfer JIT, se han propuesto los parámetros 'opcache.jit' y 'opcache.jit_buffer_size'. Para desactivar JIT ahora se puede usar 'opcache.jit=disable' en lugar de 'opcache.jit_buffer_size=0'. Además, se han realizado cambios que reducen el consumo de memoria y mejoran el rendimiento del JIT en algunas situaciones.
- Se ha declarado obsoleta la conducta en la que se permitía asignar valores null automáticamente a los parámetros de funciones con un valor predeterminado de null. Para que dichos parámetros puedan aceptar valores null, ahora se requiere la indicación explícita del prefijo '?'. Por ejemplo, en lugar de 'function save(Book $book = null) {}', se debe indicar 'function save(?Book $book = null) {}'.
- Se ha implementado la clase \Dom\HTMLDocument, que soporta un análisis correcto del marcado HTML5.
- Se ha añadido la función request_parse_body() para analizar solicitudes HTTP con tipo de contenido multipart/form-data (RFC1867).
Fuente: opennet.ru
