Se ha presentado la primera versión alpha de la nueva rama del lenguaje de programación PHP 8.2. El lanzamiento está programado para el 24 de noviembre. Las principales novedades, ya disponibles para pruebas o planificadas para su implementación en PHP 8.2:
- Se han añadido tipos separados "false" y "null", que pueden utilizarse, por ejemplo, para devolver un indicativo de error o un valor vacío por parte de una función. Anteriormente, "false" y "null" solo podían usarse junto con otros tipos (por ejemplo, "string|false"), y ahora pueden aplicarse por separado: function alwaysFalse(): false { return false; }
- Se ha añadido la posibilidad de marcar una clase como de solo lectura. Las propiedades en tales clases solo pueden asignarse una vez, después de lo cual no estarán disponibles para su modificación. Anteriormente, solo se podía marcar como de solo lectura propiedades individuales de la clase, y ahora se puede activar este modo para todas las propiedades de la clase a la vez. Indicar la bandera "readonly" a nivel de clase también bloquea la adición dinámica de propiedades a la clase. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = ‘wrong’; // Error: Cannot create dynamic property Post::$unknown
- Se ha declarado obsoleta la capacidad de creación dinámica de propiedades en la clase (como "post->unknown" en el ejemplo anterior). En PHP 9.0, acceder a propiedades que no están definidas originalmente en la clase generará un error (ErrorException). Las clases que proporcionan métodos __get y __set para crear propiedades, o propiedades dinámicas en stdClass continuarán funcionando sin cambios, solo se interrumpirá el soporte para el uso implícito de propiedades inexistentes para proteger al desarrollador de errores ocultos. Para mantener la funcionalidad del código antiguo, se ha propuesto el atributo "#[AllowDynamicProperties]", que permite el uso de propiedades dinámicas.
- Se ha proporcionado la capacidad de filtrar parámetros confidenciales en los datos de la traza de pila que se generan durante un error. La omisión de cierta información puede ser necesaria cuando los datos sobre los errores que ocurren se envían automáticamente a servicios externos que rastrean problemas e informan a los desarrolladores. Por ejemplo, se pueden excluir parámetros de la traza que incluyen nombres de usuario, contraseñas y variables de entorno. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception(‘Error’); } test(‘foo’, ‘password’, ‘baz’); Error fatal: Excepción no capturada: Error en test.php:8 Traza de la pila: #0 test.php(11): test(‘foo’, Object(SensitiveParameterValue), ‘baz’) #1 {main} lanzado en test.php en la línea 8
- Se ha declarado obsoleta la posibilidad de interpolar variables en cadenas mediante las expresiones «${var}» y ${(var)}». Se ha mantenido el soporte para las interpolaciones comúnmente utilizadas «{$var}» y «$var». Por ejemplo: «Hola {$world}»; OK «Hola $world»; OK «Hola ${world}»; Obsoleto: Usar ${} en cadenas está obsoleto
- Se han declarado obsoletos los objetos llamables parcialmente soportados (callable) que se pueden invocar a través de «call_user_func($callable)», pero no soportan la invocación en forma de «$callable()»: «self::method» «parent::method» «static::method» [«self», «method»] [«parent», «method»] [«static», «method»] [«Foo», «Bar::method»] [new Foo, «Bar::method»]
- Se ha implementado una conversión de registro de caracteres independiente de la localidad. Funciones como strtolower() y strtoupper() ahora siempre convierten el registro de caracteres en el rango ASCII, independientemente de la configuración de la localidad «C».
Fuente: opennet.ru
