Izdaja programskega jezika PHP 8.2

Po letu dni razvoja je bila predstavljena izdaja programskega jezika PHP 8.2. Nova veja vključuje vrsto novih funkcij, pa tudi več sprememb, ki motijo ​​združljivost.

Ključne izboljšave v PHP 8.2:

  • Dodana možnost označevanja razreda kot samo za branje. Lastnosti v takšnih razredih je mogoče nastaviti samo enkrat, potem pa jih ni več mogoče spreminjati. Prej so bile posamezne lastnosti razreda lahko označene kot samo za branje, zdaj pa lahko ta način omogočite za vse lastnosti razreda hkrati. Določanje zastavice »samo za branje« na ravni razreda prav tako prepreči dinamično dodajanje lastnosti v razred. readonly class Post { public function __construct( public string $title, public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'napačno'; // Napaka: ni mogoče ustvariti dinamične lastnosti Post::$unknown
  • Dodani ločeni tipi »true«, »false« in »null«, ki lahko sprejmejo samo eno veljavno vrednost in se uporabljajo na primer za vrnitev funkcije z zastavico zaključka napake ali prazno vrednostjo. Prej je bilo mogoče »true«, »false« in »null« uporabljati samo v povezavi z drugimi vrstami (na primer »string|false«), zdaj pa jih je mogoče uporabiti ločeno: function alwaysFalse(): false { return false ; }
  • Omogoča filtriranje občutljivih parametrov v izhodu sledenja sklada med napako. Izrezovanje določenih informacij bo morda potrebno, ko se informacije o napakah, ki se pojavijo, samodejno pošljejo storitvam tretjih oseb, ki spremljajo težave in o njih obveščajo razvijalce. Iz sledenja lahko na primer izključite parametre, ki vključujejo uporabniška imena, gesla in spremenljivke okolja. preizkus funkcije ($foo, #[\SensitiveParameter] $geslo, $baz) { vrzi novo izjemo ('Napaka'); } test('foo', 'geslo', 'baz'); Usodna napaka: Neulovljena izjema: Napaka v test.php:8 Sled sklada: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} vrnjen v test.php na vrstici 8
  • Dovoljeno definiranje konstant v lastnostih (lastnost, mehanizem za ponovno uporabo kode). Do konstant, definiranih v lastnosti, je mogoče dostopati prek razreda, ki uporablja lastnost (vendar ne prek imena lastnosti). trait Foo { public const CONSTANT = 1; public function bar(): int { return self::CONSTANT; // Usodna napaka } } class Bar { use Foo; } var_dump(Bar::CONSTANT); // 1
  • Dodana možnost določanja tipov v disjunktivni normalni obliki (DNF, Disjunctive Normal Form), ki omogoča kombiniranje unije tipov (zbirke dveh ali več tipov) in presečišča tipov (tipov, katerih vrednosti spadajo pod več vrste hkrati). class Foo { public function bar((A&B)|null $entity) { if ($entity === null) { return null; } vrni $entiteto; }}
  • Predlagana je bila nova razširitev »Random« s funkcijami in razredi za generiranje psevdonaključnih števil in zaporedij. Modul zagotavlja objektno usmerjen vmesnik, omogoča izbiro različnih mehanizmov za generiranje psevdo-naključnih števil, vključno s tistimi, ki so primerni za uporabo v kriptografiji, in nudi pomožne funkcije, na primer za naključno mešanje nizov in nizov, izbiro naključnih ključev nizov, hkratna uporaba več generatorjev z lastnim neodvisnim stanjem. $rng = $je_proizvodnja? nov Random\Engine\Secure() : nov Random\Engine\Mt19937(1234); $randomizer = novo Naključno\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Implementirana pretvorba velikih in malih črk, neodvisna od lokalne nastavitve. Funkcije, kot sta strtolower() in strtoupper(), zdaj vedno pretvorijo velike in male črke znakov v obsegu ASCII, kot da bi bile nastavljene na področne nastavitve "C".
  • 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.
  • Možnost dinamičnega ustvarjanja lastnosti v razredu je bila opuščena. V PHP 9.0 bo dostop do lastnosti, ki niso prvotno definirane v razredu, povzročil napako (ErrorException). Razredi, ki zagotavljajo metode __get in __set za ustvarjanje lastnosti ali dinamične lastnosti v stdClass, bodo še naprej delovali nespremenjeno, podprto bo samo implicitno delo z neobstoječimi lastnostmi, da se razvijalec zaščiti pred skritimi napakami. Za ohranitev dela stare kode je predlagan atribut »#[AllowDynamicProperties]«, ki omogoča uporabo dinamičnih lastnosti.
  • Možnost zamenjave vrednosti spremenljivk v nize z uporabo izrazov "${var}" in ${(var)} je bila zastarela. Podpora za pogosto uporabljene zamenjave "{$var}" in "$var" je bila ohranjena. Na primer: "Pozdravljeni {$world}"; OK "Pozdravljeni $world"; OK "Pozdravljeni ${world}"; Zastarelo: uporaba ${} v nizih je zastarela
  • Zastareli delno podprti klici, ki jih je mogoče poklicati prek "call_user_func($callable)", vendar ne podpirajo klicanja v obliki "$callable()": "self::method" "parent::method" "static" ::method " ["self", "method"] ["parent", "method"] ["static", "method"] ["Foo", "Bar::method"] [novo Foo, "Bar: :method" ]
  • V nastavitve je bila dodana direktiva error_log_mode, ki vam omogoča, da določite način dostopa do dnevnika napak.

Vir: opennet.ru

Dodaj komentar