PHP 8.1 ukukhululwa kolwimi lwenkqubo

Emva konyaka wophuhliso, ukukhutshwa kolwimi lweprogram ye-PHP 8.1 kwaboniswa. Isebe elitsha liquka uluhlu lweempawu ezintsha, kunye neenguqu ezininzi eziphula ukuhambelana.

Uphuculo oluphambili kwi-PHP 8.1:

  • Inkxaso eyongeziweyo yobalo, umzekelo, ngoku ungasebenzisa abakhi balandelayo: enum Status { case Pending; ityala Iyasebenza; ityala ligciniwe; } iPosi yeklasi {umsebenzi kawonke-wonke __yakha (iSimo sabucala $isimo = Ubume::Isalindile;) {} iSimo somsebenzi kawonke-wonke(Isimo se-$isimo): akukho {// … }} $post-> setStatus(Isimo::Iyasebenza);
  • Inkxaso eyongeziweyo yeentambo ezikhaphukhaphu ezibizwa ngokuba ziiFibers, ezikuvumela ukuba ulawule imisonto yophumezo kwinqanaba eliphantsi. Inkxaso yeFiber icwangciswe ukuba yongezwe kwi-Amphp kunye ne-ReactPHP yesikhokelo. $ ifayibha = iFayibha entsha (umsebenzi (): akukho nto {$ valueAfterResuming = Ifayibha:: nqumamisa ('emva kokumisa'); // ... }); $valueAfterSuspending = $fiber->start(); $ ifayibha-> qala kwakhona ('emva kokuqalisa kwakhona');
  • Ukuphunyezwa kwe-cache yekhowudi yento (opcache) kuphuculwe, okwenza kube lula ukufihla ulwazi malunga nelifa leklasi. Ukuphucula kwenze ukuba kube lula ukwandisa ukusebenza kwezinye izicelo nge-5-8%. Olunye ulungelelwaniso lubandakanya ukuphuculwa kokusebenza kweJIT, ukuphunyezwa kwe-JIT yenkxaso yoyilo lwe-ARM64 (AArch64), ukukhawulezisa ukusonjululwa kwamagama, ukusetyenziswa kwe-timelib kunye ne-ext/date amathala eencwadi, ukonyuka kolandelelwano kunye nokusebenza kwe-deserialization, ukulungelelaniswa kwe-get_declared_classes (), ukuqhuma () , strnatcmp () umsebenzi, strnatcmp(), dechex(). Ngokubanzi, kukho ukwanda kwe-23.0% kwintsebenzo ye-Symfony Demo, kunye ne-3.5% ye-WordPress.
  • Umsebenzisi wokukhulula ngaphakathi kuluhlu "...$var", evumela ukutshintshwa kwezinto ezikhoyo xa kuchazwa uluhlu olutsha, kwandisiwe ukuxhasa izitshixo zomtya (ngaphambili kuphela iziphawuli zedijithali zazixhaswa). Umzekelo, ungasebenzisa ngoku kwikhowudi: $array1 = [“a” => 1]; $array2 = ["b" => 2]; uluhlu lwe-$= [“a” => 0, …$array1, …$array2]; var_dump(i-array ye-$); // ["a" => 1, "b" => 2]
  • Ivumelekile ukusebenzisa igama elingundoqo "elitsha" kwiziqalisi, njengeenkcazo zomsebenzi njengeparameter engagqibekanga okanye kwiimpawu zengxabano. iklasi MyController { umsebenzi kawonke wonke __construct ( yabucala Logger $logger = NullLogger entsha (), ) {}}
  • Kunokwenzeka ukumakisha iimpawu zeklasi zokufikelela kufundo kuphela (ulwazi kwiipropati ezinjalo lunokubhalwa kube kanye kuphela, emva koko aluyi kufumaneka ukuba lutshintshe). iklasi PostData {umsebenzi kawonke-wonke __construct(umtya wokufunda kuphela kawonke-wonke $title, public readonly DateTimeImmutable $date, ) {} } $post = iPosi entsha('Isihloko', /* … */); I-$ post-> isihloko = 'Ezinye'; > Impazamo: Ayinakulungisa ipropathi efundwayo kuphela Thumela::$title
  • Ulungelelwaniso olutsha luphunyeziwe kwizinto ezinokubizelwa - ukuvalwa ngoku kungenziwa ngokubiza umsebenzi kwaye ugqithise ixabiso "..." njengengxabano (okt myFunc(...) endaweni yoValo:: fromCallable('myFunc ')): umsebenzi foo (int $a, int $b) { /* … */ } $foo = foo(…); $ foo(a: 1, b: 2);
  • Inkxaso egcweleyo yongezwa kwiindidi ze-intersection, ekuvumela ukuba wenze iintlobo ezintsha ngokudibanisa esele zikhona. Ngokungafaniyo neendidi zomanyano, ezichaza ingqokelela yeentlobo ezimbini nangaphezulu, iintlobo zentlangano-ndlela zifuna ubukho bazo naziphi na iintlobo ezidwelisiweyo, kodwa zonke iindidi ezikhankanyiweyo kwiseti ukuba zizaliswe. umsebenzi velisa iSlug(HasTitle&HasId $post) { buyisela strtolower($post->getTitle()) . $ post-> getId (); }
  • Kukho uhlobo olutsha "ungaze" olunokusetyenziswa ukwazisa abahlalutyi abangatshintshiyo ukuba umsebenzi uyakuphelisa ukuphunyezwa kwenkqubo, umzekelo ngokuphosa okungaphandle okanye ukwenza umsebenzi wokuphuma. umsebenzi dd(umxube we-$input): ungaze {uphume; }
  • Umsebenzi omtsha we-array_is_list ucetyiwe, okuvumela ukuba uqikelele ukuba izitshixo kuluhlu zicwangciswe ngokulandelelana kwamanani amanani anyukayo, ukuqala ku-0: $list = [“a”, “b”, “c”]; uluhlu_ luluhlu (uluhlu lwe-$); // inyaniso $notAList = [1 => “a”, 2 => “b”, 3 => “c”]; uluhlu_luluhlu ($ notAList); // ubuxoki $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // bubuxoki
  • Ngoku ungasebenzisa igama elingundoqo elithi "ekugqibeleni" ukunqanda ukuba izinto ezingaguqukiyo zeklasi zabazali zingabhalwa ngaphezulu. iklasi Foo {final public const X = "foo"; } iBar yeklasi yandisa iFoo { public const X = "bar"; > Impazamo ebulalayo: IBar::X ayinakukhuphela ngaphezulu okokugqibela okungaguqukiyo Foo::X }
  • Imisebenzi ye-fsync kunye ne-fdatasync zicetywayo ukuze zinyanzelise utshintsho olugcinwe kwi-cache yediski. $file = fopen("sample.txt", "w"); fwrite($ifayile, "Eminye imixholo"); ukuba (fsync($file)) {echo "Ifayile iqhutyelwe ngempumelelo kwidisk."; } fvala(ifayile ye-$);
  • Kongezwe ukukwazi ukusebenzisa izimaphambili "0o" kunye "0O" kumanani octal, ukongeza kwisimaphambili ebesisetyenziswe ngaphambili "0". 016 === 0o16; // inyaniso 016 === 0O16; // yinyani
  • Kucetywayo ukunciphisa ngokukhethayo ukusetyenziswa kwe-$ GLOBALS, okuya kubangela ukuphulwa kokuhambelana nomva, kodwa kuya kwenza ukuba kube lula ukukhawuleza ukusebenza kunye ne-arrays. Umzekelo, ukubanakho ukukhubaza ukubhala kwi-$GLOBALS kunye nokudlula i-$GLOBALS ngesalathisi kuyaqwalaselwa. Uhlalutyo lweepakethe ezingama-2000 lubonise ukuba ngama-23 kuphela azo achatshazelwa lolu tshintsho. Umzekelo, ukuba isindululo sivunyiwe, i-8.1 ayisayi kuphinda ixhase intetho efana nale: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); nge_ref($GLOBALS);
  • Iindlela zangaphakathi kufuneka ngoku zibuyisele uhlobo oluchanekileyo. Kwi-PHP 8.1, ukubuyisela uhlobo olungahambelani nesibhengezo somsebenzi kuya kuvelisa isilumkiso, kodwa kwi-PHP 9.0 isilumkiso siya kutshintshwa ngempazamo.
  • Umsebenzi uqhubekile ekutshintsheni imisebenzi ukusuka ekusebenziseni izixhobo ukuya ekulawuleni izinto. I-finfo_* kunye ne-imap_* imisebenzi idluliselwe kwizinto.
  • Ukugqithiswa kwamaxabiso angekho ngqiqweni njengeempikiswano kwimisebenzi yangaphakathi ephawulwe njengengenakucimeka iye yarhoxiswa. Kwi-PHP 8.1, ukusebenzisa i-constructs like str_contains("umtya", null) kuya kukhokelela kwisilumkiso, kwaye kwi-PHP 9 kwimpazamo.
  • Inkxaso eyongeziweyo ye-MurmurHash3 kunye ne-xxHash hashing algorithms.

umthombo: opennet.ru

Yongeza izimvo