Esitatud on uue PHP 8.1 programmeerimiskeele haru esimene alpha-variant. VÀljalase on planeeritud 25. novembriks. Peamised uuendused, mis on juba testimiseks saadaval vÔi mille rakendamine on plaanis PHP 8.1-s:
- Lisatud on toetust loeteludele, nĂ€iteks saame nĂŒĂŒd kasutada jĂ€rgmisi konstruktsioone: enum Status { case Pending; case Active; case Archived; } class Post { public function __construct( private Status $status = Status::Pending; ) {} public function setStatus(Status $status): void { // ⊠} } $post->setStatus(Status::Active);
- Lisatud on toetust kergete tÔugete jaoks, mida nimetatakse kiududeks (Fiber) ja mis vÔimaldavad madala taseme paralleelsuse juhtimist. Kiudude toetust plaanitakse lisada Amphp ja ReactPHP raamistikesse. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('after suspending'); // ⊠}); $valueAfterSuspending = $fiber->start(); $fiber->resume('after resuming');
- Parandatud objektikoodi vahemĂ€lu (opcache) rakendust, kus on nĂŒĂŒd vĂ”imalik klasside pĂ€rimise teavet vahemĂ€lustada. Optimeerimine on vĂ”imaldanud mĂ”nede rakenduste jĂ”udlust tĂ”sta 5-8%.
- Massiivide sees oleva lahtipakkimise operaator «âŠ$var» on liikunud edasi, vĂ”imaldades olemasolevate massiivide asendamist uue massiivi mÀÀramisel ja on laiendatud stringi vĂ”tmete toega (varem toetati ainult numbrilisi identifikaatoreid). NĂ€iteks saab nĂŒĂŒd koodis kasutada: $array1 = ['a' => 1]; $array2 = ['b' => 2]; $array = ['a' => 0, âŠ$array1, âŠ$array2]; var_dump($array); // ['a' => 1, 'b' => 2]
- Ilmunud on uus tĂŒĂŒp «never», mida saab kasutada staatiliste analĂŒsaatorite teavitamiseks, et funktsioon lĂ”petab programmi tĂ€itmise, nĂ€iteks visates erandi vĂ”i tĂ€ites funktsiooni exit. function dd(mixed $input): never { exit; }
- Pakutud on uus funktsioon array_is_list, mis vÔimaldab mÀÀrata, et massiivi vÔtmed on jÀrjestatud suurenevate numbriliste vÀÀrtuste jÀrgi, alustades 0-st: $list = ['a', 'b', 'c']; array_is_list($list); // true $notAList = [1 => 'a', 2 => 'b', 3 => 'c']; array_is_list($notAList); // false $alsoNotAList = ['a' => 'a', 'b' => 'b', 'c' => 'c']; array_is_list($alsoNotAList); // false
- Pakku ette vĂ”imalus klassi konstantide ĂŒlekirjutamiseks pĂ€rimisel. Vanema klassi konstantide ĂŒlekirjutamise lubamiseks vĂ”ib kasutada mĂ€rksĂ”na âfinalâ. class Foo { public const X = "foo"; final public const Z = "foo"; } class Bar extends Foo { public const X = "bar"; }
- Pakkunud funktsioone fsync ja fdatasync sundimaks muudatusi kettakohandisse salvestama. $file = fopen("sample.txt", "w"); fwrite($file, "MÔned sisu"); if (fsync($file)) { echo "Fail on edukalt kettale salvestatud."; } fclose($file);
- Lisatud vĂ”imalus kasutada eelmisi eeliseid â0oâ ja â0Oâ kaheksandeliste arvude jaoks, lisaks varem kasutatud â0â eelis. 016 === 0o16; // true 016 === 0O16; // true
- Pakkunud vĂ”imalust piirata $GLOBALS kasutamist, mis toob kaasa tagasipööramatuse, kuid kiirendab oluliselt massiividega töötamise operatsioone. NĂ€iteks kaalutakse kirjutamise keeldumist $GLOBALS-is ja $GLOBALS-i edastamist viidena. 2000 paketi analĂŒĂŒs nĂ€itas, et vaid 23 neist puutuks kokku nende muudatustega. NĂ€iteks, kui ettepanek 8.1-s heaks kiidetakse, lĂ”petatakse selliste vĂ€ljendite toetamine nagu: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
- JĂ€tkatud töö funktsioonide ĂŒleviimiseks ressursikasutamiselt objektimanipulatsioonile. Funktsioonid finfo_* ja imap_* on ĂŒle viidud objektidele.
- Deklaritud aegunud nullide vÀÀrtuse edastamine sisemistele funktsioonidele, mis on mÀrgitud kui non-nullable. PHP 8.1-s toob konstruktsioonide, nagu str_contains("string", null), kasutamine kaasa hoiatuse, ja PHP 9-s vea.
- Lisatud tugi hashimisalgrĂŒtmidele MurmurHash3 ja xxHash.
Allikas: opennet.ru
