PHP 8.1 programmeringsspråk utgivelse

Etter et år med utvikling ble utgivelsen av programmeringsspråket PHP 8.1 presentert. Den nye grenen inkluderer en rekke nye funksjoner, samt flere endringer som bryter kompatibiliteten.

Viktige forbedringer i PHP 8.1:

  • Lagt til støtte for oppregninger, for eksempel, kan du nå bruke følgende konstruksjoner: enum Status { case Pending; etui Aktiv; sak Arkivert; } klasse Post { public function __construct( privat Status $status = Status::Pending; ) {} public function setStatus(Status $status): void { // … } } $post->setStatus(Status::Active);
  • Lagt til støtte for lette tråder kalt Fibres, som lar deg administrere utførelsestråder på et lavt nivå. Fiberstøtte er planlagt lagt til Amphp- og ReactPHP-rammeverket. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('etter suspending'); // ... }); $valueAfterSuspending = $fiber->start(); $fiber->resume('etter gjenopptagelse');
  • Implementeringen av objektkodebufferen (opcache) er forbedret, noe som gjør det mulig å bufre informasjon om klassearv. Optimalisering gjorde det mulig å øke ytelsen til enkelte applikasjoner med 5-8 %. Andre optimaliseringer inkluderer optimalisering av JIT-drift, implementering av JIT-støtte for ARM64-arkitekturen (AArch64), akselerasjon av navneoppløsning, optimalisering av timelib og ext/date-biblioteker, økt serialiserings- og deserialiseringsytelse, optimalisering av get_declared_classes(), explode() , strtr()-funksjon, strnatcmp(), dechex(). Generelt er det en 23.0 % økning i ytelse for Symfony Demo, og 3.5 % for WordPress.
  • Utpakkingsoperatøren inne i arrayene "...$var", som tillater substitusjon av eksisterende arrays når en ny array defineres, har blitt utvidet til å støtte strengnøkler (tidligere ble kun digitale identifikatorer støttet). For eksempel kan du nå bruke i kode: $array1 = [“a” => 1]; $array2 = ["b" => 2]; $array = [“a” => 0, …$array1, …$array2]; var_dump($array); // ["a" => 1, "b" => 2]
  • Det er tillatt å bruke det "nye" nøkkelordet i initialiserere, for eksempel i funksjonsdefinisjoner som standardparameter eller i argumentattributter. klasse MyController { public function __construct( privat Logger $logger = new NullLogger(), ) {} }
  • Det er mulig å merke klasseegenskaper for skrivebeskyttet tilgang (informasjon i slike egenskaper kan kun skrives én gang, deretter vil den ikke være tilgjengelig for endring). class PostData { public function __construct( offentlig skrivebeskyttet streng $tittel, offentlig skrivebeskyttet DateTimeImmutable $date, ) {} } $post = new Post('Tittel', /* … */); $post->title = 'Annet'; > Feil: Kan ikke endre skrivebeskyttet egenskap Post::$title
  • En ny syntaks er implementert for callable objekter - en closure kan nå dannes ved å kalle en funksjon og gi den verdien "..." som et argument (dvs. myFunc(...) i stedet for Closure::fromCallable('myFunc) ')): funksjon foo (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Lagt til full støtte for krysstyper, slik at du kan lage nye typer ved å kombinere eksisterende. I motsetning til fagforeningstyper, som definerer samlinger av to eller flere typer, krever krysstyper tilstedeværelsen av ikke noen av de oppførte typene, men alle de spesifiserte typene i settet som skal fylles. funksjon genererSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • Det er en ny type "aldri" som kan brukes til å informere statiske analysatorer om at en funksjon vil avslutte programkjøringen, for eksempel ved å kaste et unntak eller utføre exit-funksjonen. funksjon dd(blandet $input): aldri { exit; }
  • En ny funksjon array_is_list har blitt foreslått, som lar deg bestemme at nøklene i matrisen er ordnet i rekkefølge med økende numeriske verdier, med start fra 0: $list = ["a", "b", "c"]; array_is_list($liste); // true $notAList = [1 => "a", 2 => "b", 3 => "c"]; array_is_list($notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // falsk
  • Du kan nå bruke nøkkelordet "endelig" for å forhindre at overordnede klassekonstanter blir overstyrt. klasse Foo { final public const X = "foo"; } klasse Bar utvider Foo { public const X = "bar"; > Fatal feil: Bar::X kan ikke overstyre endelig konstant Foo::X }
  • Funksjonene fsync og fdatasync er foreslått for å tvinge endringer som skal lagres fra diskbufferen. $fil = fopen("sample.txt", "w"); fwrite($fil, "Noe innhold"); if (fsync($file)) { echo "Filen har blitt lagret på disken."; } fclose($fil);
  • Lagt til muligheten til å bruke prefiksene "0o" og "0O" for oktale tall, i tillegg til det tidligere brukte prefikset "0". 016 === 0o16; // sant 016 === 0O16; // sant
  • Det foreslås å selektivt begrense bruken av $GLOBALS, noe som vil føre til brudd på bakoverkompatibilitet, men vil gjøre det mulig å øke hastigheten på operasjoner med arrays betydelig. For eksempel vurderes muligheten for å deaktivere skriving til $GLOBALS og sende $GLOBALS med pekeren. En analyse av 2000 pakker viste at bare 23 av dem ville bli berørt av denne endringen. For eksempel, hvis forslaget godkjennes, vil ikke lenger 8.1 støtte uttrykk som: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
  • Interne metoder skal nå returnere riktig type. I PHP 8.1 vil retur av en type som ikke samsvarer med funksjonsdeklarasjonen produsere en advarsel, men i PHP 9.0 vil advarselen bli erstattet med en feil.
  • Arbeidet fortsatte med å overføre funksjoner fra bruk av ressurser til å manipulere objekter. Funksjonene finfo_* og imap_* er overført til objekter.
  • Sending av nullverdier som argumenter til interne funksjoner merket som ikke-nullbare har blitt avviklet. I PHP 8.1 vil bruk av konstruksjoner som str_contains("string", null) føre til en advarsel, og i PHP 9 til en feil.
  • Lagt til støtte for MurmurHash3 og xxHash hashing algoritmer.

Kilde: opennet.ru

Legg til en kommentar