Lanzamiento del lenguaje de programación PHP 8.2

Luego de un año de desarrollo, se presentó el lanzamiento del lenguaje de programación PHP 8.2. La nueva rama incluye una serie de novedades, así como varios cambios que rompen la compatibilidad.

Mejoras clave en PHP 8.2:

  • Se agregó la capacidad de marcar una clase como de solo lectura. Las propiedades de tales clases se pueden establecer solo una vez, después de lo cual no estarán disponibles para cambios. Anteriormente, las propiedades de clase individuales podían marcarse como de solo lectura, pero ahora puede activar este modo para todas las propiedades de clase a la vez. Especificar el indicador de "solo lectura" en el nivel de clase también bloquea la adición dinámica de propiedades a la clase. clase de solo lectura Publicación { función pública __construct( cadena pública $título, autor público $autor, ) {} } $publicación = nueva publicación(/* … */); $publicación->desconocido = 'incorrecto'; // Error: No se puede crear la propiedad dinámica Publicación::$desconocido
  • Se agregaron tipos separados "verdadero", "falso" y "nulo", que solo pueden tomar un valor válido y se usan, por ejemplo, para devolver una función con un indicador de terminación de error o un valor vacío. Anteriormente, “true”, “false” y “null” solo podían usarse junto con otros tipos (por ejemplo, “string|false”), pero ahora se pueden usar por separado: function alwaysFalse(): false { return false ; }
  • Proporcionó la capacidad de filtrar configuraciones confidenciales en la salida de seguimiento de la pila en el momento de un error. Es posible que sea necesario recortar cierta información cuando la información sobre los errores que ocurren se envía automáticamente a servicios de terceros que rastrean los problemas e informan a los desarrolladores sobre ellos. Por ejemplo, puede excluir parámetros del seguimiento que incluyen nombres de usuario, contraseñas y variables de entorno. prueba de función ($foo, #[\SensitiveParameter] $contraseña, $baz) { throw new Exception('Error'); } prueba('foo', 'contraseña', 'baz'); Error fatal: Excepción no detectada: Error en test.php:8 Rastreo de pila: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} lanzado en test.php en la línea 8
  • Permitido definir constantes en rasgos (rasgo, un mecanismo para reutilizar código). Se puede acceder a las constantes definidas en un rasgo a través de la clase que usa el rasgo (pero no a través del nombre del rasgo). rasgo Foo { public const CONSTANTE = 1; barra de funciones públicas(): int { return self::CONSTANT; // Error fatal } } class Bar { use Foo; } var_dump(Bar::CONSTANTE); // 1
  • Se agregó la capacidad de especificar tipos en la forma normal disyuntiva (DNF, Disjunctive Normal Form), lo que le permite combinar la unión de tipos (colecciones de dos o más tipos) y la intersección de tipos (tipos cuyos valores se encuentran en varios tipos simultáneamente). clase Foo { barra de función pública ((A&B)|nulo $ entidad) { if ($entidad === nulo) { retorno nulo; } devolver $entidad; } }
  • Se ha propuesto una nueva extensión "Random" con funciones y clases para generar números y secuencias pseudoaleatorias. El módulo proporciona una interfaz orientada a objetos, le permite seleccionar diferentes motores para generar números pseudoaleatorios, incluidos aquellos adecuados para su uso en criptografía, y proporciona funciones auxiliares, por ejemplo, para mezclar aleatoriamente matrices y cadenas, seleccionar claves de matriz aleatorias, Uso simultáneo de varios generadores con su propio estado independiente. $rng = $es_producción? nuevo Random\Engine\Secure() : nuevo Random\Engine\Mt19937(1234); $aleatorio = nuevo Aleatorio\Aleatorio($rng); $randomizer->shuffleString('foobar');
  • Se implementó la conversión de casos independiente de la configuración regional. Funciones como strtolower() y strtoupper() ahora siempre convierten el caso de los caracteres en el rango ASCII, como cuando se establece la configuración regional en "C".
  • Se agregaron nuevas funciones: mysqli_execute_query, curl_upkeep, Memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodio_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.
  • Se agregaron nuevos métodos: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • La capacidad de crear dinámicamente propiedades en una clase ha quedado obsoleta. En PHP 9.0, acceder a propiedades que no están definidas inicialmente en la clase generará un error (ErrorException). Las clases que proporcionan los métodos __get y __set para crear propiedades, o propiedades dinámicas en stdClass, seguirán funcionando sin cambios, solo se admitirá el trabajo implícito con propiedades inexistentes para proteger al desarrollador de errores ocultos. Para preservar el trabajo del código antiguo, se propone el atributo “#[AllowDynamicProperties]”, que permite el uso de propiedades dinámicas.
  • La capacidad de sustituir valores de variables en cadenas usando las expresiones "${var}" y ${(var)}" ha quedado obsoleta. Se ha conservado la compatibilidad con las sustituciones "{$var}" y "$var" de uso común. Por ejemplo: "Hola {$mundo}"; OK "Hola $mundo"; OK "Hola ${mundo}"; En desuso: el uso de ${} en cadenas está en desuso
  • Llamables parcialmente compatibles en desuso que se pueden llamar a través de "call_user_func($callable)", pero no admiten llamadas en la forma "$callable()": "self::method" "parent::method" "static::method" ["self", "method"] ["parent", "method"] ["static", "method"] ["Foo", "Bar::method"] [new Foo, "Bar:: method"]
  • La directiva error_log_mode se ha agregado a la configuración, lo que le permite determinar el modo de acceso al registro de errores.

Fuente: opennet.ru

Añadir un comentario