Tika parādīta pirmā PHP 8.1 programēšanas valodas jaunās filiāles alfa versija. Izlaidums plānots 25. novembrī. Galvenās jaunievedumi, kas jau ir pieejami testēšanai vai plānoti realizācijai PHP 8.1:
- Ieviesa atbalstu enumerācijām, piemēram, tagad var izmantot šādas konstrukcijas: 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);
- Ieviesa atbalstu vieglajiem pavedieniem, ko sauc par fiberiem (Fiber), kas ļauj pārvaldīt paralelizāciju zemākā līmenī. Atbalsts fiberiem tiek plānots pievienot Amphp un ReactPHP ietvaros. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend(‘pēc atlikšanas’); // … }); $valueAfterSuspending = $fiber->start(); $fiber->resume(‘pēc atsākšanas’);
- Uzlabota objektu koda kešošanas (opcache) realizācija, kurā parādījās iespēja kešot informāciju par klašu mantošanu. Optimizācija ļāva paaugstināt dažu lietojumprogrammu veiktspēju par 5-8%.
- Izsaiņošanas operators iekšējās masīvās „…$var”, kas ļauj veikt esošu masīvu ielādi, nosakot jauno masīvu, ir paplašināts ar atbalstu virkne atslēgām (agrāk tika atbalstīti tikai skaitliskie identifikatori). Piemēram, tagad var izmantot šādu kodu: $array1 = [„a” => 1]; $array2 = [„b” => 2]; $array = [„a” => 0, …$array1, …$array2]; var_dump($array); // [„a” => 1, „b” => 2]
- Parādījās jauns tips „never”, ko var izmantot, lai informētu statiskos analizatorus, ka funkcija pārtrauc programmas izpildi, piemēram, izsaucot izņēmumu vai veicot funkciju exit. function dd(mixed $input): never { exit; }
- Ieteikta jauna funkcija array_is_list, kas ļauj noteikt, vai atslēgas masīvā ir sakārtotas augoša skaitļu vērtību secībā, sākot no 0: $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
- Piedāvāta iespēja pārrakstīt konstantus klasē mantošanas procesā. Lai aizliegtu vecākās klases konstantu pārrakstīšanu, var izmantot atslēgvārdu „final”. class Foo { public const X = „foo”; final public const Z = „foo”; } class Bar extends Foo { public const X = „bar”; }
- Piedāvātas funkcijas fsync un fdatasync, lai piespiestu izmaiņu saglabāšanu no diska kešatmiņas. $file = fopen(„sample.txt”, „w”); fwrite($file, „Daži saturi”); if (fsync($file)) { echo „Fails ir veiksmīgi saglabāts diskā.”; } fclose($file);
- Pievienota iespēja izmantot prefiksus „0o” un „0O” astoņkrāsu skaitļiem, papildus iepriekš izmantotajam prefiksam „0”. 016 === 0o16; // true 016 === 0O16; // true
- Piedāvāts selektīvi ierobežot $GLOBALS izmantošanu, kas novedīs pie atpakaļsaderības pārkāpuma, bet sniegs iespēju ievērojami paātrināt operācijas ar masīviem. Piemēram, tiek ņemta vērā iespēja aizliegt rakstīšanu $GLOBALS un pārsūtīt $GLOBALS pa norādi. Analizējot 2000 pakotnes, tika noskaidrots, ka tikai 23 no tām tiks ietekmētas šīs izmaiņas. Piemēram, ja priekšlikums tiks apstiprināts, 8.1 versijā atbalsts šādām izteiksmēm tiks pārtraukts: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
- Turpināta pāreja no resursiem uz objektiem funkcijām. Uz objektiem ir pārceltas funkcijas finfo_* un imap_*.
- Tiek uzskatīta par novecojušu null vērtību nodošana kā argumenti iekšējām funkcijām, kas marķētas kā non-nullable. PHP 8.1 konstrukcijas, piemēram, str_contains(„string”, null), izraisīs brīdinājumu, bet PHP 9 radīs kļūdu.
- Pievienota atbalsts hašēšanas algoritmiem MurmurHash3 un xxHash.
Avots: opennet.lv
