Predstavljena je prva alfa izdaja nove veje programskega jezika PHP 8.2. Izid je predviden za 24. november. Glavne novosti, ki so že na voljo za testiranje ali načrtovane za implementacijo v PHP 8.2:
- Dodani ločeni tipi »false« in »null«, ki ju je mogoče uporabiti na primer za funkcijo, ki vrne zastavico o prekinitvi napake ali prazno vrednost. Prej sta se »false« in »null« lahko uporabljala samo v povezavi z drugimi vrstami (na primer »string|false«), zdaj pa ju je mogoče uporabiti ločeno: function alwaysFalse(): false { return false; }
- 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
- Možnost dinamičnega ustvarjanja lastnosti v razredu (kot je "post->unknown" v zgornjem primeru) 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 metodi __get in __set za ustvarjanje lastnosti ali dinamičnih lastnosti v stdClass, bodo še naprej delovali brez sprememb, podprto bo le 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.
- 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
- 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" ]
- 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".
Vir: opennet.ru
