Den første alfa-utgaven av den nye grenen av programmeringsspråket PHP 8.1 er nå tilgjengelig. Utgivelsen er planlagt til 25. november. Hovednyhetene, som allerede er tilgjengelige for testing eller planlegges for implementering i PHP 8.1:
- Støtte for oppramsinger er lagt til, for eksempel kan følgende konstruksjoner nå brukes: 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);
- Støtte for lettvekts-tråder, kalt fiber (Fiber), er lagt til, og gir mulighet for lavnivå styring av parallellisering. Støtte for fiber planlegges lagt til i rammeverkene Amphp og ReactPHP. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend(‘etter suspensjon’); // … }); $valueAfterSuspending = $fiber->start(); $fiber->resume(‘etter gjenopptakelse’);
- Implementeringen av objektkode-caching (opcache) har blitt forbedret, med mulighet for å cache informasjon om arv av klasser. Optimaliseringen har økt ytelsen til enkelte applikasjoner med 5-8%.
- Oppløsingsoperatoren i matriser «…$var», som gjør det mulig å sette inn eksisterende matriser når man definerer en ny matrise, har fått støtte for streng-nøkler (tidligere støttet kun numeriske ID-er). For eksempel, nå kan man bruke i koden: $array1 = [«a» => 1]; $array2 = [«b» => 2]; $array = [«a» => 0, …$array1, …$array2]; var_dump($array); // [«a» => 1, «b» => 2]
- En ny type «never» har blitt introdusert, som kan brukes til å informere statiske analysatorer om at en funksjon avslutter programmet, for eksempel ved å kaste et unntak eller utføre exit-funksjonen. function dd(mixed $input): never { exit; }
- En ny funksjon array_is_list er foreslått, som lar deg bestemme at nøklene i en matrise er ordnet i økende numeriske verdier, startende fra 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
- Muligheten for å overstyre konstanter i klassen under arv er foreslått. For å forhindre overstyring av konstanter fra foreldrekategorien, kan nøkkelordet «final» brukes. class Foo { public const X = «foo»; final public const Z = «foo»; } class Bar extends Foo { public const X = «bar»; }
- Funksjonene fsync og fdatasync er foreslått for å tvinge lagring av endringer fra diskbufferen. $file = fopen(«sample.txt», «w»); fwrite($file, «Noe innhold»); if (fsync($file)) { echo «Filen har blitt vellykket lagret på disk.»; } fclose($file);
- Muligheten for å bruke prefiksene «0o» og «0O» for oktale tall er lagt til, i tillegg til det tidligere brukte prefikset «0». 016 === 0o16; // true 016 === 0O16; // true
- Det er foreslått å begrense bruken av $GLOBALS selektivt, noe som vil føre til brudd på bakoverkompatibilitet, men gi mulighet for betydelig økt hastighet på operasjoner med matriser. For eksempel vurderes muligheten for å forby skriving til $GLOBALS og passing $GLOBALS via pekere. Analyse av 2000 pakker viste at bare 23 av dem ville bli berørt av dette endringen. For eksempel, dersom forslaget vedtas, vil støtte for slike uttrykk i 8.1 opphøre: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
- Arbeidet med å konvertere funksjoner fra bruk av ressurser til objektmanipulering fortsetter. Funksjonene finfo_* og imap_* er konvertert til objekter.
- Overføring av nullverdier som argumenter til interne funksjoner merket som non-nullable er erklært som utdaterte. I PHP 8.1 vil bruken av konstruksjoner som str_contains(«string», null) resultere i advarsler, og i PHP 9 til feil.
- Støtte for hash-algoritmene MurmurHash3 og xxHash er lagt til.
Kilde: opennet.ru
