PHP 8.1 programmeringsspråk release

Efter ett års utveckling presenterades lanseringen av programmeringsspråket PHP 8.1. Den nya grenen innehåller en rad nya funktioner, samt flera ändringar som bryter kompatibiliteten.

Viktiga förbättringar i PHP 8.1:

  • Lägg till stöd för uppräkningar, till exempel, du kan nu använda följande konstruktioner: enum Status { case Pending; fodral Aktiv; ärende Arkiverat; } class Post { public function __construct( privat Status $status = Status::Pending; ) {} public function setStatus(Status $status): void { // … } } $post->setStatus(Status::Active);
  • Tillagt stöd för lätta trådar som kallas Fibres, som låter dig hantera exekveringstrådar på en låg nivå. Fiberstöd planeras att läggas till Amphp- och ReactPHP-ramverken. $fiber = new Fiber(funktion (): void { $valueAfterResuming = Fiber::suspend('efter suspendering'); // ... }); $valueAfterSuspending = $fiber->start(); $fiber->resume('efter återupptagande');
  • Implementeringen av objektkodscachen (opcache) har förbättrats, vilket gör det möjligt att cacha information om klassarv. Optimering gjorde det möjligt att öka prestandan för vissa applikationer med 5-8 %. Andra optimeringar inkluderar optimering av JIT-drift, implementering av JIT-stöd för ARM64-arkitekturen (AArch64), acceleration av namnupplösning, optimering av timelib och ext/date-bibliotek, ökad serialiserings- och deserialiseringsprestanda, optimering av get_declared_classes(), explode() , strtr() funktion, strnatcmp(), dechex(). Generellt sett är det en 23.0 % ökning i prestanda för Symfony Demo och 3.5 % för WordPress.
  • Uppackningsoperatorn inuti arrays "...$var", som tillåter ersättning av befintliga arrayer när en ny array definieras, har utökats till att stödja strängnycklar (tidigare stöddes endast digitala identifierare). Till exempel kan du nu använda i kod: $array1 = [“a” => 1]; $array2 = ["b" => 2]; $array = [“a” => 0, …$array1, …$array2]; var_dump($array); // ["a" => 1, "b" => 2]
  • Det är tillåtet att använda nyckelordet "nya" i initialiserare, till exempel i funktionsdefinitioner som en standardparameter eller i argumentattribut. class MyController { public function __construct( privat Logger $logger = new NullLogger(), ) {} }
  • Det är möjligt att markera klassegenskaper för skrivskyddad åtkomst (information i sådana egenskaper kan bara skrivas en gång, därefter kommer den inte att vara tillgänglig för ändring). class PostData { public function __construct( offentlig skrivskyddad sträng $title, offentlig skrivskyddad DateTimeImmutable $date, ) {} } $post = new Post('Title', /* … */); $post->title = 'Annan'; > Fel: Kan inte ändra skrivskyddad egenskap Post::$title
  • En ny syntax har implementerats för anropsbara objekt - en stängning kan nu bildas genom att anropa en funktion och skicka den med värdet "..." som ett argument (dvs myFunc(...) istället för Closure::fromCallable('myFunc ')): function foo (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Lade till fullt stöd för korsningstyper, så att du kan skapa nya typer genom att kombinera befintliga. Till skillnad från fackföreningstyper, som definierar samlingar av två eller flera typer, kräver korsningstyper närvaron av inte någon av de listade typerna, utan alla de specificerade typerna i uppsättningen som ska fyllas. function generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • Det finns en ny typ "aldrig" som kan användas för att informera statiska analysatorer om att en funktion kommer att avsluta programexekveringen, till exempel genom att kasta ett undantag eller exekvera exitfunktionen. function dd(blandad $input): aldrig { exit; }
  • En ny funktion array_is_list har föreslagits, som låter dig bestämma att nycklarna i arrayen är ordnade i ordning med ökande numeriska värden, med start från 0: $list = ["a", "b", "c"]; array_is_list($lista); // true $notAList = [1 => "a", 2 => "b", 3 => "c"]; array_is_list($notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // falskt
  • Du kan nu använda nyckelordet "slutlig" för att förhindra att överordnade klasskonstanter åsidosätts. klass Foo { final public const X = "foo"; } klass Bar utökar Foo { public const X = "bar"; > Fatalt fel: Bar::X kan inte åsidosätta slutkonstanten Foo::X }
  • Funktionerna fsync och fdatasync föreslås för att tvinga ändringar att sparas från diskcachen. $fil = fopen("sample.txt", "w"); fwrite($fil, "Vissa innehåll"); if (fsync($file)) { echo "Filen har framgångsrikt sparats på disken."; } fclose($fil);
  • Lade till möjligheten att använda prefixen "0o" och "0O" för oktala tal, förutom det tidigare använda prefixet "0". 016 === 0o16; // sant 016 === 0O16; // Sann
  • Det föreslås att selektivt begränsa användningen av $GLOBALS, vilket kommer att leda till en kränkning av bakåtkompatibilitet, men kommer att göra det möjligt att avsevärt påskynda operationer med arrayer. Till exempel övervägs möjligheten att inaktivera skrivning till $GLOBALS och skicka $GLOBALS med pekaren. En analys av 2000 paket visade att endast 23 av dem skulle påverkas av denna förändring. Om förslaget till exempel godkänns kommer 8.1 inte längre att stödja uttryck som: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
  • Interna metoder bör nu returnera rätt typ. I PHP 8.1 kommer att returnera en typ som inte matchar funktionsdeklarationen ge en varning, men i PHP 9.0 kommer varningen att ersättas med ett fel.
  • Arbetet fortsatte med att överföra funktioner från att använda resurser till att manipulera objekt. Funktionerna finfo_* och imap_* har överförts till objekt.
  • Att skicka nollvärden som argument till interna funktioner som är markerade som icke-nullbara har fasats ut. I PHP 8.1 kommer användning av konstruktioner som str_contains("string", null) att leda till en varning och i PHP 9 till ett fel.
  • Lade till stöd för MurmurHash3 och xxHash hashing-algoritmer.

Källa: opennet.ru

Lägg en kommentar