Lanzamento da linguaxe de programación PHP 8.2

Despois dun ano de desenvolvemento, presentouse o lanzamento da linguaxe de programación PHP 8.2. A nova rama inclúe unha serie de novidades, así como varios cambios que rompen a compatibilidade.

Melloras clave en PHP 8.2:

  • Engadiuse a posibilidade de marcar unha clase como de só lectura. As propiedades destas clases só se poden establecer unha vez, despois de que non se poden cambiar. Anteriormente, as propiedades individuais das clases podían marcarse de só lectura, pero agora podes activar este modo para todas as propiedades da clase á vez. Especificar a marca de "só lectura" a nivel de clase tamén impide que as propiedades se engadan dinámicamente á clase. clase de só lectura Publicar { función pública __construír( cadea pública $título, Autor público $autor, ) {} } $publicación = publicación nova (/* … */); $post->unknown = 'erróneo'; // Erro: non se pode crear a propiedade dinámica Post::$unknown
  • Engadíronse tipos separados "true", "false" e "null", que só poden tomar un valor válido e úsanse, por exemplo, para devolver unha función cunha marca de terminación de erro ou un valor baleiro. Anteriormente, "true", "false" e "null" só se podían usar xunto con outros tipos (por exemplo, "cadea|false"), pero agora pódense usar por separado: function alwaysFalse(): false { return false ; }
  • Ofrece a capacidade de filtrar parámetros sensibles na saída de rastrexo da pila durante un erro. Pode ser necesario recortar certa información cando a información sobre erros que se producen se envía automaticamente a servizos de terceiros que rastrexan os problemas e informan aos desenvolvedores sobre os mesmos. Por exemplo, pode excluír do rastrexo os parámetros que inclúen nomes de usuario, contrasinais e variables de ambiente. proba de función( $foo, #[\SensitiveParameter] $contrasinal, $baz ) { throw new Exception('Erro'); } test('foo', 'contrasinal', 'baz'); Erro fatal: Excepción non detectada: Erro en test.php:8 Trazo de pila: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {principal} lanzado en test.php na liña 8
  • Permítese definir constantes en trazos (trait, mecanismo para reutilizar código). Pódese acceder ás constantes definidas nun trazo a través da clase que usa o trazo (pero non a través do nome do trazo). trazo Foo { public const CONSTANT = 1; barra de función pública(): int { return self::CONSTANT; // Erro fatal } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Engadida a posibilidade de especificar tipos na forma normal disxuntiva (DNF, Forma normal disxuntiva), que permite combinar a unión de tipos (coleccións de dous ou máis tipos) e a intersección de tipos (tipos cuxos valores caen en varios tipos simultáneamente). class Foo { barra de funcións públicas((A&B)|null $entidade) { if ($entidade === nulo) { return null; } devolver $entidade; } }
  • Propúxose unha nova extensión "Random" con funcións e clases para xerar números e secuencias pseudoaleatorios. O módulo proporciona unha interface orientada a obxectos, permítelle seleccionar diferentes motores para xerar números pseudoaleatorios, incluídos os axeitados para o seu uso en criptografía, e ofrece funcións auxiliares, por exemplo, para mesturar aleatoriamente matrices e cadeas, seleccionar claves de matriz aleatorias, etc. uso simultáneo de varios xeradores co seu propio estado independente. $rng = $é_produción ? novo Random\Engine\Secure(): novo Random\Engine\Mt19937(1234); $randomizer = new Random\Randomizer($rng); $randomizador->shuffleString('foobar');
  • Implementouse a conversión de maiúsculas e minúsculas independente da rexión. As funcións como strtolower() e strtoupper() agora converten sempre as maiúsculas e minúsculas dos caracteres no intervalo ASCII coma se definisen a configuración rexional "C".
  • Engadíronse novas funcións: mysqli_execute_query, curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.
  • Engadíronse novos métodos: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • A capacidade de crear dinámicamente propiedades nunha clase quedou en desuso. En PHP 9.0, acceder a propiedades que non están definidas inicialmente na clase producirá un erro (ErrorException). As clases que proporcionan métodos __get e __set para crear propiedades ou propiedades dinámicas en stdClass seguirán funcionando sen cambios, só se admitirá o traballo implícito con propiedades inexistentes para protexer o programador de erros ocultos. Para preservar o traballo do código antigo, proponse o atributo "#[AllowDynamicProperties]", que permite o uso de propiedades dinámicas.
  • A capacidade de substituír valores variables en cadeas usando as expresións "${var}" e ${(var)} quedou obsoleta. Mantívose o soporte para as substitucións "{$var}" e "$var" de uso habitual. Por exemplo: "Ola {$mundo}"; OK "Ola $ mundo"; OK "Ola ${world}"; Obsoleto: o uso de ${} en cadeas está en desuso
  • As chamadas parcialmente compatibles están obsoletas que se poden chamar mediante "call_user_func($callable)" pero non admiten chamadas en forma de "$callable()": "self::method" "parent::method" "static" ::method " ["self", "método"] ["pai", "método"] ["estático", "método"] ["Foo", "Bar::método"] [novo Foo, "Bar: :método" ]
  • A directiva error_log_mode engadiuse á configuración, o que lle permite determinar o modo de acceso ao rexistro de erros.

Fonte: opennet.ru

Engadir un comentario