PHP 8.1 lage langaj pwogramasyon

Apre yon ane devlopman, yo te prezante liberasyon lang pwogramasyon PHP 8.1 la. Branch nan nouvo gen ladan yon seri de karakteristik nouvo, osi byen ke plizyè chanjman ki kraze konpatibilite.

Amelyorasyon kle nan PHP 8.1:

  • Te ajoute sipò pou enimerasyon, pou egzanp, kounye a ou ka itilize konstriksyon sa yo: enum Status { case Pending; ka Aktif; ka Achive; } klas Post { fonksyon piblik __konstwi( Estati prive $ estati = Estati::Annatant; ) {} fonksyon piblik setStatus(Statis $estati): anile { // … } } $post->setStatus(Status::Aktif);
  • Te ajoute sipò pou fil ki lejè yo rele Fib, ki pèmèt ou jere fil ekzekisyon nan yon nivo ki ba. Yo planifye sipò fib pou ajoute nan kad Amphp ak ReactPHP. $fib = nouvo Fib (fonksyon (): void { $valueAfterResuming = Fib::sispann ('apre sispann'); // ... }); $valueAfterSuspending = $fib->kòmanse(); $fib->rezime('apre rezime');
  • Aplikasyon kachèt kòd objè (opcache) amelyore, sa ki fè li posib pou kache enfòmasyon sou eritaj klas la. Optimizasyon te fè li posib ogmante pèfòmans nan kèk aplikasyon pa 5-8%. Lòt optimize yo enkli optimize operasyon JIT, aplikasyon sipò JIT pou achitekti ARM64 (AArch64), akselerasyon rezolisyon non, optimize bibliyotèk timelib ak ext/date, ogmante pèfòmans serializasyon ak deserializasyon, optimize get_declared_classes(), eksploze () , strtr() fonksyon, strnatcmp(), dechex(). An jeneral, gen yon ogmantasyon 23.0% nan pèfòmans pou Symfony Demo, ak 3.5% pou WordPress.
  • Operatè debalaj la andedan etalaj "...$var", ki pèmèt sibstitisyon nan etalaj ki deja egziste lè defini yon nouvo etalaj, te pwolonje pou sipòte kle fisèl (anvan yo te sipòte sèlman idantifyan dijital). Pou egzanp, ou ka kounye a itilize nan kòd: $ array1 = [“a” => 1]; $etalaj2 = ["b" => 2]; $etalaj = [“yon” => 0, …$etalaj1, …$etalaj2]; var_dump($etalaj); // ["a" => 1, "b" => 2]
  • Li pèmèt yo sèvi ak mo kle "nouvo" nan inisyalize yo, tankou nan definisyon fonksyon kòm yon paramèt default oswa nan atribi agiman. klas MyController { fonksyon piblik __construct ( prive Logger $ logger = nouvo NullLogger (), ) {} }
  • Li posib pou make pwopriyete klas yo pou aksè lekti sèlman (enfòmasyon nan pwopriyete sa yo ka ekri sèlman yon fwa, apre sa li p ap disponib pou chanje). klas PostData { fonksyon piblik __konstwi (chaj piblik lekti sèlman $tit, piblik lekti sèlman DatTimeImutabl $dat, ) {} } $post = nouvo Post('Tit', /* … */); $post->title = 'Lòt'; > Erè: Pa ka modifye pwopriyete lekti sèlman Post::$title
  • Yo te aplike yon nouvo sentaks pou objè callable - yon fèmen kounye a ka fòme lè w rele yon fonksyon epi pase li valè "..." kòm yon agiman (sa vle di myFunc (...) olye de Closure::fromCallable('myFunc). ')): fonksyon foo (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Te ajoute sipò konplè pou kalite entèseksyon, ki pèmèt ou kreye nouvo kalite lè w konbine sa ki deja egziste. Kontrèman ak kalite sendika yo, ki defini koleksyon de oswa plis kalite, kalite entèseksyon mande pou prezans pa youn nan kalite ki nan lis la, men tout kalite espesifye nan seri a dwe ranpli. fonksyon generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • Gen yon nouvo tip "pa janm" ki ka itilize pou enfòme analizè estatik ke yon fonksyon pral mete fen nan ekzekisyon pwogram lan, pou egzanp lè w voye yon eksepsyon oswa egzekite fonksyon an sòti. fonksyon dd(mixed $input): pa janm { sòti; }
  • Yo te pwopoze yon nouvo fonksyon array_is_list, ki pèmèt ou detèmine kle yo nan etalaj la ranje nan lòd pou ogmante valè nimerik, apati de 0: $list = [“a”, “b”, “c”]; array_is_list($list); // vre $notAList = [1 => “a”, 2 => “b”, 3 => “c”]; array_is_list($notAList); // fo $alsoNotAList = [“a” => “a”, “b” => “b”, “c” => “c”]; array_is_list($touNotAList); // fo
  • Ou kapab kounye a itilize mo kle "final" la pou anpeche konstan klas paran yo pa chanje. klas Foo { final public const X = "foo"; } Class Bar extends Foo { public const X = "bar"; > Erè fatal: Bar::X pa ka pase sou kont final Foo::X }
  • Yo pwopoze fonksyon fsync ak fdatasync pou fòse chanjman yo sove nan kachèt disk la. $fichye = fopen("echantiyon.txt", "w"); fwrite($fichye, "Kèk kontni"); if (fsync($file)) { echo "Fichiye a te pèsiste avèk siksè sou disk."; } fclose($fichye);
  • Te ajoute kapasite pou sèvi ak prefiks "0o" ak "0O" pou nimewo octal, anplis de prefiks "0" ki te itilize deja. 016 === 0o16; // vre 016 === 0O16; // vre
  • Yo pwopoze pou oaza limite itilizasyon $GLOBALS, ki pral mennen nan yon vyolasyon konpatibilite bak, men li pral fè li posib pou siyifikativman akselere operasyon ak etalaj. Pa egzanp, posiblite pou enfim ekri $GLOBALS epi pase $GLOBALS pa pointeur ap konsidere. Yon analiz de 2000 pakè te montre ke sèlman 23 nan yo ta afekte pa chanjman sa a. Pa egzanp, si yo apwouve pwopozisyon an, 8.1 p ap sipòte ekspresyon tankou: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBAL; unset($GLOBALS); by_ref($GLOBALS);
  • Metòd entèn yo ta dwe kounye a retounen kalite ki kòrèk la. Nan PHP 8.1, retounen yon kalite ki pa matche ak deklarasyon fonksyon an pral pwodui yon avètisman, men nan PHP 9.0 avètisman an pral ranplase ak yon erè.
  • Travay kontinye sou transfere fonksyon soti nan itilize resous yo manipile objè yo. Fonksyon finfo_* ak imap_* yo te transfere nan objè yo.
  • Pase valè nil kòm agiman nan fonksyon entèn ki make non-nullable te depreche. Nan PHP 8.1, lè l sèvi avèk konstwi tankou str_contains ("string", null) ap mennen nan yon avètisman, ak nan PHP 9 nan yon erè.
  • Te ajoute sipò pou algoritm hashing MurmurHash3 ak xxHash.

Sous: opennet.ru

Add nouvo kòmantè