Llançament del llenguatge de programació PHP 8.2

Després d'un any de desenvolupament, es va presentar el llançament del llenguatge de programació PHP 8.2. La nova branca inclou una sèrie de novetats, així com diversos canvis que trenquen la compatibilitat.

Millores clau a PHP 8.2:

  • S'ha afegit la possibilitat de marcar una classe com a només de lectura. Les propietats d'aquestes classes només es poden establir una vegada, després de la qual no estaran disponibles per al canvi. Abans, les propietats de classe individuals es podien marcar com a només lectura, però ara podeu activar aquest mode per a totes les propietats de classe alhora. Especificar la marca "només lectura" a nivell de classe també bloqueja l'addició dinàmica de propietats a la classe. classe només lectura Publicació { funció pública __construct( cadena pública $títol, autor públic $autor, ) {} } $publicació = publicació nova (/* … */); $post->unknown = 'incorrecte'; // Error: no es pot crear la propietat dinàmica Post::$unknown
  • S'han afegit tipus separats "true", "fals" i "null", que només poden prendre un valor vàlid i s'utilitzen, per exemple, per retornar una funció amb un indicador de finalització d'error o un valor buit. Abans, "true", "false" i "null" només es podien utilitzar juntament amb altres tipus (per exemple, "string|false"), però ara es poden utilitzar per separat: function alwaysFalse(): false { return false ; }
  • Proporciona la possibilitat de filtrar paràmetres sensibles a la sortida de traça de la pila en el moment d'un error. Es pot requerir tallar certa informació quan la informació sobre errors que es produeixen s'envia automàticament a serveis de tercers que fan un seguiment dels problemes i n'informen els desenvolupadors. Per exemple, podeu excloure paràmetres de la traça que inclouen noms d'usuari, contrasenyes i variables d'entorn. prova de funció( $foo, #[\SensitiveParameter] $contrasenya, $baz ) { throw new Exception('Error'); } test('foo', 'contrasenya', 'baz'); Error fatal: Excepció no detectada: Error a test.php:8 Traça de pila: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {principal} llançat a test.php en línia 8
  • Permet definir constants en trets (tret, un mecanisme per reutilitzar codi). Es pot accedir a les constants definides en un tret a través de la classe que utilitza el tret (però no a través del nom del tret). tret Foo { public const CONSTANT = 1; barra de funció pública (): int { return self::CONSTANT; // Error fatal } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • S'ha afegit la possibilitat d'especificar tipus en la forma normal disjuntiva (DNF, Forma normal disjuntiva), que permet combinar la unió de tipus (col·leccions de dos o més tipus) i la intersecció de tipus (tipus els valors dels quals cauen en diversos tipus simultàniament). class Foo { barra de funcions pública((A&B)|nul $entitat) { if ($entitat === null) { retorna null; } retorna $entity; } }
  • S'ha proposat una nova extensió "Random" amb funcions i classes per generar nombres i seqüències pseudoaleatòries. El mòdul proporciona una interfície orientada a objectes, us permet seleccionar diferents motors per generar números pseudoaleatoris, inclosos els adequats per al seu ús en criptografia, i proporciona funcions auxiliars, per exemple, per barrejar matrius i cadenes aleatòriament, seleccionar claus de matrius aleatòries, ús simultani de diversos generadors amb el seu propi estat independent. $rng = $és_producció ? nou Random\Engine\Secure(): nou Random\Engine\Mt19937(1234); $aleatoriador = nou Aleatori\Atzar ($rng); $randomizer->shuffleString('foobar');
  • S'ha implementat la conversió de minúscules i minúscules independent de la configuració regional. Funcions com strtolower() i strtoupper() ara sempre converteixen les majúscules i minúscules dels caràcters de l'interval ASCII, com quan s'estableix la configuració regional a "C".
  • S'han afegit funcions noves: 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.
  • Mètodes nous afegits: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • La capacitat de crear dinàmicament propietats en una classe ha quedat obsoleta. A PHP 9.0, l'accés a propietats que no estan definides inicialment a la classe donarà lloc a un error (ErrorException). Les classes que proporcionen mètodes __get i __set per crear propietats, o propietats dinàmiques a stdClass, continuaran funcionant sense canvis, només s'admetrà el treball implícit amb propietats inexistents per protegir el desenvolupador d'errors ocults. Per preservar el treball del codi antic, es proposa l'atribut “#[AllowDynamicProperties]”, que permet l'ús de propietats dinàmiques.
  • S'ha obsolet la possibilitat de substituir valors variables en cadenes mitjançant expressions "${var}" i ${(var)}". S'ha mantingut el suport per a les substitucions "{$var}" i "$var" d'ús habitual. Per exemple: "Hola {$world}"; D'acord "Hola $world"; D'acord "Hola ${world}"; Obsolet: l'ús de ${} a les cadenes està obsolet
  • Les trucades parcialment compatibles que es poden cridar mitjançant "call_user_func($callable)" s'han obsolet, però no admeten la trucada en la forma "$callable()": "self::method" "parent::method" "static :: mètode" ["self", "mètode"] ["parent", "mètode"] ["estàtic", "mètode"] ["Foo", "Bar::mètode"] [nou Foo, "Bar::mètode" "]
  • La directiva error_log_mode s'ha afegit a la configuració, la qual cosa us permet determinar el mode d'accés al registre d'errors.

Font: opennet.ru

Afegeix comentari