Ukukhishwa kolimi lokuhlela lwe-PHP 8.1

Ngemva konyaka wentuthuko, kwethulwa ukukhululwa kolimi lohlelo lwe-PHP 8.1. Igatsha elisha lihlanganisa uchungechunge lwezici ezintsha, kanye nezinguquko ezimbalwa ezinqamula ukuhambisana.

Ukuthuthukiswa okubalulekile ku-PHP 8.1:

  • Ukwesekwa okwengeziwe kokubala, isibonelo, manje ungasebenzisa lezi zakhiwo ezilandelayo: Isimo se-enum {icala Lisalindile; icala Iyasebenza; icala Kufakwe kungobo yomlando; } Okuthunyelwe kwekilasi {umsebenzi womphakathi __kwakha(isimo sangasese $isimo = Isimo::Kusalindile;) {} ukusetha umsebenzi womphakathiIsimo(Isimo $isimo): akukho {// … } } $post->setStatus(Isimo::Iyasebenza);
  • Ukwesekwa okwengeziwe kochungechunge olungasindi olubizwa ngokuthi ama-Fibers, akuvumela ukuthi uphathe uchungechunge lokukhishwa ezingeni eliphansi. Ukusekelwa kwe-fiber kuhlelwe ukuthi kwengezwe kuhlaka lwe-Amphp ne-ReactPHP. $fiber = I-Fiber entsha(umsebenzi (): ayinalutho {$valueAfterResuming = Fiber::suspend('ngemuva kokumisa'); // ... }); $valueAfterSuspending = $fiber->start(); $fiber-> qala kabusha ('ngemuva kokuqalisa kabusha');
  • Ukuqaliswa kwenqolobane yekhodi yento (i-opcache) kuthuthukisiwe, okwenza kube nokwenzeka ukufihla ulwazi olumayelana nefa lekilasi. Ukuthuthukisa kwenze kwaba nokwenzeka ukwandisa ukusebenza kwezinye izinhlelo zokusebenza ngo-5-8%. Okunye ukulungiselelwa kufaka phakathi ukwenziwa kahle kokusebenza kwe-JIT, ukuqaliswa kosekelo lwe-JIT ku-Architecture ye-ARM64 (AArch64), ukusheshisa ukulungiswa kwamagama, ukwenziwa kahle kwemitapo yolwazi yesikhathi esibekiwe kanye ne-ext/dete, ukusebenza okuthuthukisiwe kwe-serialization kanye nokusebenza kokukhishwa kwe-deserialization, ukuthuthukiswa kwe-get_declared_classes(), i-explode() , strnatcmp() umsebenzi, strnatcmp(), dechex(). Ngokuvamile, kunokwenyuka okungu-23.0% kokusebenza kwe-Symfony Demo, kanye no-3.5% ku-WordPress.
  • I-opharetha ekhipha ukupakisha ngaphakathi kwamalungu afanayo "...$var", evumela ukushintshwa kwamalungu afanayo akhona lapho kuchazwa amalungu afanayo amasha, inwetshiwe ukuze isekele okhiye bezintambo (ngaphambilini kwakusekelwe izihlonzi zedijithali kuphela). Isibonelo, manje ungasebenzisa kukhodi: $array1 = [“a” => 1]; $array2 = ["b" => 2]; $array = [“a” => 0, …$array1, …$array2]; var_dump($ array); // ["a" => 1, "b" => 2]
  • Kuvunyelwe ukusebenzisa igama elingukhiye "elisha" kuziqalisi, njengezincazelo zomsebenzi njengepharamitha ezenzakalelayo noma izibaluli zokungqubuzana. class MyController { umsebenzi womphakathi __construct( private Logger $logger = new NullLogger(), ) {} }
  • Kuyenzeka ukumaka izakhiwo zekilasi ukuze zifinyeleleke ngokufunda kuphela (ulwazi kulezo zakhiwo lungabhalwa kanye kuphela, ngemva kwalokho ngeke lutholakalele ushintsho). class PostData { umsebenzi womphakathi __construct( iyunithi yezinhlamvu efundwa umphakathi kuphela $title, i- public readonly DateTimeImmutable $date, ) {} } $okuthunyelwe = Okuthunyelwe okusha('Isihloko', /* … */); $post->title = 'Okunye'; > Iphutha: Ayikwazi ukulungisa isakhiwo esifundwayo kuphela Thumela::$title
  • Kusetshenziswe i-syntax entsha yezinto ezishayekayo - ukuvala manje kungakhiwa ngokubiza umsebenzi futhi kuwudlulisele inani "..." njengengxabano (okungukuthi myFunc(...) esikhundleni sokuthi Ukuvala::kusukaCallable('myFunc ')): umsebenzi foo (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Kwengezwe usekelo olugcwele lwezinhlobo zempambanomgwaqo, okukuvumela ukuthi udale izinhlobo ezintsha ngokuhlanganisa ezikhona. Ngokungafani nezinhlobo zezinyunyana, ezichaza amaqoqo ezinhlobo ezimbili noma ngaphezulu, izinhlobo zokuhlangana zidinga ukuba khona kwanoma yiziphi izinhlobo ezisohlwini, kodwa zonke izinhlobo ezishiwo kusethi okufanele zigcwaliswe. function generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • Kukhona uhlobo olusha oluthi "ungasoze" olungasetshenziswa ukwazisa abahlaziyi abamile ukuthi umsebenzi uzonqamula ukwenziwa kohlelo, ngokwesibonelo ngokwenza okuhlukile noma ngokwenza umsebenzi wokuphuma. function dd(mixed $input): ungalokothi {uphume; }
  • Kuhlongoziwe umsebenzi omusha othi array_is_list, okuvumela ukuthi unqume ukuthi okhiye abakuhlelo bahlelwa ngokulandelana kwamanani ezinombolo akhuphukayo, kusukela ku-0: $list = [“a”, “b”, “c”]; array_is_list(uhlu lwe-$); // true $notAList = [1 => “a”, 2 => “b”, 3 => “c”]; array_is_list($notAList); // amanga $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($ alsoNotAList); // amanga
  • Manje ungasebenzisa igama elingukhiye "lokugcina" ukuze uvimbele ukungaguquguquki kwekilasi lomzali ekubhalweni. class Foo {final public const X = "foo"; } Ibha yekilasi inweba i-Foo { public const X = "ibha"; > Iphutha eliyingozi: Ibha::X ayikwazi ukubhala ngaphezulu i-Foo::X }
  • Imisebenzi ye-fsync ne-fdatasync ihlongozwa ukuze iphoqelele izinguquko ukuthi zilondolozwe kunqolobane yediski. $file = fopen("sample.txt", "w"); fwrite($file, "Okunye okuqukethwe"); uma (fsync($file)) {echo "Ifayela liqhutshekwe ngempumelelo kudiski."; } fclose($file);
  • Kwengezwe amandla okusebenzisa iziqalo "0o" kanye "0O" zezinombolo ze-octal, ngaphezu kwesiqalo esisetshenziswe ngaphambilini "0". 016 === 0o16; // iqiniso 016 === 0O16; // iqiniso
  • Kuphakanyiswe ukuthi kukhawulwe ngokukhetha ukusetshenziswa kwe-$GLOBALS, okuzoholela ekwephuleni ukuhambisana okubuyela emuva, kodwa kuzokwenza kube nokwenzeka ukusheshisa ngokuphawulekayo ukusebenza ngama-array. Isibonelo, ithuba lokukhubaza ukubhala ku-$GLOBALS kanye nokudlula i-$GLOBALS ngesikhombi kuyacatshangelwa. Ukuhlaziywa kwamaphakheji angu-2000 kubonise ukuthi angu-23 kuphela azothinteka kulolu shintsho. Isibonelo, uma isiphakamiso sivunyiwe, i-8.1 ngeke isasekela izinkulumo ezinjengokuthi: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; ayisethiwe($GLOBALS); by_ref($GLOBALS);
  • Izindlela zangaphakathi manje kufanele zibuyisele uhlobo olulungile. Ku-PHP 8.1, ukubuyisela uhlobo olungafani nesimemezelo somsebenzi kuzoveza isexwayiso, kodwa ku-PHP 9.0 isexwayiso sizothathelwa indawo ngephutha.
  • Umsebenzi uqhubekile wokudlulisa imisebenzi ukusuka ekusebenziseni izinsiza kuya ekuxazululeni izinto. Imisebenzi ye-finfo_* kanye ne-imap_* idluliselwe ezintweni.
  • Ukudlulisa amanani angenalutho njengama-agumenti emisebenzini yangaphakathi emakwe ngokuthi ayinakuchithwa kwehlisiwe. Ku-PHP 8.1, ukusebenzisa ukwakheka okufana ne-str_contains("string", null) kuzoholela esixwayiso, futhi ku-PHP 9 kube nephutha.
  • Ukwesekwa okwengeziwe kwe-MurmurHash3 kanye ne-xxHash hashing algorithms.

Source: opennet.ru

Engeza amazwana