Izdanje programskog jezika PHP 8.2

Nakon godinu dana razvoja, predstavljeno je izdanje programskog jezika PHP 8.2. Nova grana uključuje niz novih značajki, kao i nekoliko promjena koje prekidaju kompatibilnost.

Ključna poboljšanja u PHP 8.2:

  • Dodana mogućnost označavanja klase kao samo za čitanje. Svojstva u takvim klasama mogu se postaviti samo jednom, nakon čega se ne mogu mijenjati. Prethodno su pojedina svojstva klase mogla biti označena kao samo za čitanje, ali sada možete omogućiti ovaj način za sva svojstva klase odjednom. Određivanje oznake "samo za čitanje" na razini klase također blokira dinamičko dodavanje svojstava u klasu. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'pogrešno'; // Pogreška: nije moguće stvoriti dinamičko svojstvo Post::$unknown
  • Dodani zasebni tipovi "true", "false" i "null", koji mogu uzeti samo jednu važeću vrijednost i koriste se, na primjer, za vraćanje funkcije s oznakom prekida pogreške ili praznom vrijednošću. Prethodno su se "true", "false" i "null" mogli koristiti samo u kombinaciji s drugim tipovima (na primjer, "string|false"), ali sada se mogu koristiti odvojeno: function alwaysFalse(): false { return false ; }
  • Pruža mogućnost filtriranja osjetljivih parametara u izlazu praćenja stoga tijekom pogreške. Izrezivanje određenih informacija može biti potrebno kada se informacije o pogreškama koje se pojave automatski šalju uslugama trećih strana koje prate probleme i informiraju programere o njima. Na primjer, iz praćenja možete isključiti parametre koji uključuju korisnička imena, lozinke i varijable okruženja. test funkcije( $foo, #[\SensitiveParameter] $lozinka, $baz ) { throw new Exception('Error'); } test('foo', 'lozinka', 'baz'); Fatalna pogreška: Neuhvaćena iznimka: Pogreška u test.php:8 Stack trace: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} bačeno u test.php na liniji 8
  • Dopušteno je definirati konstante u svojstvima (osobina, mehanizam za ponovnu upotrebu koda). Konstantama definiranim u svojstvu može se pristupiti kroz klasu koja koristi svojstvo (ali ne kroz naziv svojstva). trait Foo { public const KONSTANT = 1; public function bar(): int { return self::CONSTANT; // Fatalna pogreška } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Dodana je mogućnost specificiranja tipova u disjunktivnom normalnom obliku (DNF, Disjunctive Normal Form), koji vam omogućuje kombiniranje unije tipova (kolekcija dvaju ili više tipova) i presjeka tipova (tipova čije vrijednosti potpadaju pod nekoliko tipovi istovremeno). class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } return $entitet; }}
  • Predloženo je novo proširenje "Random" s funkcijama i klasama za generiranje pseudoslučajnih brojeva i nizova. Modul pruža objektno orijentirano sučelje, omogućuje vam odabir različitih mehanizama za generiranje pseudo-nasumičnih brojeva, uključujući one prikladne za upotrebu u kriptografiji, i pruža pomoćne funkcije, na primjer, za nasumično miješanje nizova i nizova, odabir slučajnih ključeva niza, istodobna uporaba nekoliko generatora s vlastitim neovisnim stanjem. $rng = $je_proizvodnja? novi Random\Engine\Secure() : novi Random\Engine\Mt19937(1234); $randomizer = novi Random\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Implementirana konverzija velikih i malih slova neovisno o lokalnoj oznaci. Funkcije poput strtolower() i strtoupper() sada uvijek pretvaraju velika i mala slova znakova u ASCII rasponu kao da su postavljeni na "C" lokalizaciju.
  • Dodane nove funkcije: 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.
  • Dodane nove metode: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Mogućnost dinamičkog stvaranja svojstava u klasi je zastarjela. U PHP 9.0, pristup svojstvima koja nisu inicijalno definirana u klasi rezultirat će pogreškom (ErrorException). Klase koje pružaju metode __get i __set za stvaranje svojstava ili dinamičkih svojstava u stdClass nastavit će raditi bez promjena, bit će podržan samo implicitni rad s nepostojećim svojstvima kako bi se programer zaštitio od skrivenih grešaka. Kako bi se sačuvao rad starog koda, predlaže se atribut "#[AllowDynamicProperties]", koji dopušta korištenje dinamičkih svojstava.
  • Mogućnost zamjene vrijednosti varijable u nizove pomoću izraza "${var}" i ${(var)} je zastarjela. Podrška za često korištene zamjene "{$var}" i "$var" je zadržana. Na primjer: "Zdravo {$world}"; OK "Zdravo $svijete"; OK "Zdravo ${world}"; Zastarjelo: Upotreba ${} u nizovima je zastarjela
  • Zastarjeli djelomično podržani pozivi koji se mogu pozvati putem "call_user_func($callable)", ali ne podržavaju pozivanje u obliku "$callable()": "self::method" "parent::method" "static" ::method " ["self", "method"] ["parent", "method"] ["static", "method"] ["Foo", "Bar::method"] [novi Foo, "Bar: :method" ]
  • U postavke je dodana direktiva error_log_mode koja vam omogućuje da odredite način pristupa zapisniku pogrešaka.

Izvor: opennet.ru

Dodajte komentar