Lansarea limbajului de programare PHP 8.2

După un an de dezvoltare, a fost prezentată lansarea limbajului de programare PHP 8.2. Noua ramură include o serie de caracteristici noi, precum și mai multe modificări care întrerup compatibilitatea.

Îmbunătățiri cheie în PHP 8.2:

  • S-a adăugat posibilitatea de a marca o clasă ca fiind doar pentru citire. Proprietățile din astfel de clase pot fi setate o singură dată, după care nu vor fi disponibile pentru modificare. Anterior, proprietățile individuale ale clasei puteau fi marcate doar pentru citire, dar acum puteți activa acest mod pentru toate proprietățile clasei simultan. Specificarea steagului „numai citire” la nivel de clasă blochează, de asemenea, adăugarea dinamică a proprietăților la clasă. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->necunoscut = 'greșit'; // Eroare: Nu se poate crea proprietatea dinamică Post::$necunoscut
  • S-au adăugat tipuri separate „adevărat”, „fals” și „null”, care pot lua o singură valoare validă și sunt utilizate, de exemplu, pentru a returna o funcție cu un indicator de terminare a erorii sau o valoare goală. Anterior, „adevărat”, „fals” și „null” puteau fi folosite doar împreună cu alte tipuri (de exemplu, „șir|fals”), dar acum pot fi folosite separat: function alwaysFalse(): false { return false ; }
  • Oferă posibilitatea de a filtra setările sensibile în ieșirea urmăririi stivei în momentul unei erori. Eliminarea anumitor informații poate fi necesară atunci când informațiile despre erori care apar sunt trimise automat către servicii terțe care urmăresc problemele și informează dezvoltatorii despre acestea. De exemplu, puteți exclude parametrii din urmărire care includ nume de utilizator, parole și variabile de mediu. function test( $foo, #[\SensitiveParameter] $parola, $baz ) { throw new Exception('Eroare'); } test('foo', 'parola', 'baz'); Eroare fatală: Excepție neprinsă: Eroare în test.php:8 Urmărirea stivei: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {principal} aruncat în test.php pe linia 8
  • Permis să definească constante în trăsături (trăsătură, un mecanism de reutilizare a codului). Constantele definite într-o trăsătură pot fi accesate prin intermediul clasei care utilizează trăsătura (dar nu prin numele trăsăturii). caracteristica Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // Eroare fatală } } class Bar { folosește Foo; } var_dump(Bar::CONSTANT); // 1
  • S-a adăugat capacitatea de a specifica tipuri în forma normală disjunctivă (DNF, Formă normală disjunctivă), care vă permite să combinați uniunea de tipuri (colecții de două sau mai multe tipuri) și intersecția de tipuri (tipuri ale căror valori se încadrează sub mai multe tipuri simultan). class Foo { public function bar((A&B)|null $entitate) { if ($entity === null) { return null; } returnează $entitate; } }
  • A fost propusă o nouă extensie „Random” cu funcții și clase pentru generarea de numere și secvențe pseudoaleatoare. Modulul oferă o interfață orientată pe obiecte, vă permite să selectați diferite motoare pentru generarea de numere pseudo-aleatoare, inclusiv cele potrivite pentru utilizarea în criptografie și oferă funcții auxiliare, de exemplu, pentru amestecarea aleatorie a matricelor și șirurilor de caractere, selectarea cheilor de matrice aleatoare, utilizarea simultană a mai multor generatoare cu starea dumneavoastră independentă. $rng = $este_producție ? nou Random\Engine\Secure(): nou Random\Engine\Mt19937(1234); $randomizator = nou Random\Randomizer($rng); $randomizator->shuffleString('foobar');
  • S-a implementat conversia majusculelor, independentă de localitate. Funcții precum strtolower() și strtoupper() acum convertesc întotdeauna caracterele din intervalul ASCII, ca atunci când setați localitatea la „C”.
  • S-au adăugat funcții noi: 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.
  • S-au adăugat metode noi: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Abilitatea de a crea dinamic proprietăți într-o clasă a fost depreciată. În PHP 9.0, accesarea proprietăților care nu sunt definite inițial în clasă va duce la o eroare (ErrorException). Clasele care furnizează metode __get și __set pentru crearea de proprietăți sau proprietăți dinamice în stdClass vor continua să funcționeze fără modificări, doar lucrul implicit cu proprietăți inexistente va fi suportat pentru a proteja dezvoltatorul de erori ascunse. Pentru a păstra funcționarea vechiului cod, este propus atributul „#[AllowDynamicProperties]”, permițând utilizarea proprietăților dinamice.
  • Abilitatea de a înlocui valorile variabilelor în șiruri de caractere folosind expresiile „${var}” și ${(var)}” a fost retrasă. S-a păstrat suportul pentru înlocuirile „{$var}” și „$var” utilizate în mod obișnuit. De exemplu: „Bună ziua {$world}”; OK „Bună ziua $world”; OK „Bună ziua ${world}”; Învechit: utilizarea ${} în șiruri este depreciată
  • Apelabile parțial acceptate depreciate care pot fi apelate prin „call_user_func($callable)”, dar nu acceptă apelarea în forma „$callable()”: „self::method” „parent::method” „static::method” [”self”, “method”] [”parent”, “method”] [”static]”, [”Barrometodo”, [”Barometodo”] :: metoda"]
  • Directiva error_log_mode a fost adăugată la setări, permițându-vă să determinați modul de acces la jurnalul de erori.

Sursa: opennet.ru

Adauga un comentariu