PHP 8.1 programazio-lengoaia kaleratzea

Urtebeteko garapenaren ondoren, PHP 8.1 programazio-lengoaiaren bertsioa aurkeztu zen. Adar berriak ezaugarri berri batzuk biltzen ditu, baita bateragarritasuna hausten duten hainbat aldaketa ere.

Funtsezko hobekuntzak PHP 8.1-n:

  • Enumerazioetarako laguntza gehitu da, adibidez, orain eraikuntza hauek erabil ditzakezu: enum Egoera { case Pending; kasu Aktiboa; kasua Artxibatua; } class Post { public function __construct( private Status $status = Status::Pending; ) {} public function setStatus(egoera $egoera): void { // … } } $post->setStatus(Egoera::Active);
  • Fibers izeneko hari arinentzako euskarria gehitu da, exekuzio hariak maila baxuan kudeatzeko aukera ematen dutenak. Zuntz-laguntza Amphp eta ReactPHP esparruetan gehitzea aurreikusten da. $zuntz = Zuntz berria (funtzioa (): void { $valueAfterResuming = Zuntz::suspend(β€˜eten ostean’); // … }); $valueAfterSuspending = $zuntz->hasi(); $fiber->resumo(β€˜berrerekin jarraitu ondoren’);
  • Objektu-kodearen cachearen (opcache) inplementazioa hobetu da, klaseen herentziari buruzko informazioa cachean gordetzeko aukera emanez. Optimizazioak aplikazio batzuen errendimendua % 5-8 handitzea ahalbidetu zuen. Beste optimizazio batzuk JIT funtzionamenduaren optimizazioa, ARM64 arkitekturarako JIT euskarria ezartzea (AArch64), izenen ebazpenaren azelerazioa, timelib eta ext/date liburutegien optimizazioa, serializazio eta deserializazio errendimendua areagotzea, get_declared_classes(), lehertu() optimizatzea. , strtr() funtzioa, strnatcmp(), dechex(). Oro har, % 23.0 handitu da errendimendua Symfony Demo-n, eta % 3.5 WordPress-en.
  • "...$var" array barruko deskonpaktatzeko operadorea, matrize berri bat definitzerakoan dauden matrizeak ordezkatzea ahalbidetzen duena, kate-gakoak onartzeko hedatu da (lehen identifikatzaile digitalak bakarrik onartzen ziren). Adibidez, orain kodean erabil dezakezu: $array1 = [β€œa” => 1]; $array2 = ["b" => 2]; $array = [β€œa” => 0, …$array1, …$array2]; var_dump($array); // ["a" => 1, "b" => 2]
  • Hasierako gako-hitza "berria" erabiltzea onartzen da, hala nola funtzioen definizioetan parametro lehenetsi gisa edo argumentu-atributuetan. klasea MyController { funtzio publikoa __construct( erregistratzaile pribatua $logger = NullLogger berria (), ) {} }
  • Posible da klaseen propietateak markatzea irakurtzeko soilik atzitzeko (propietate horietako informazioa behin bakarrik idatzi daiteke, ondoren ez da aldatzeko erabilgarri egongo). class PostData { public function __construct( irakurketa publikoko katea $izenburua, irakurketa publikoa DataTimeImutable $data, ) {} } $post = new Post(β€˜Izenburua’, /* … */); $post->title = 'Beste batzuk'; > Errorea: Ezin da irakurri irakurtzeko soilik propietatea aldatu Post::$title
  • Sintaxi berri bat inplementatu da dei daitezkeen objektuentzat - orain itxiera bat osa daiteke funtzio bati deituz eta "..." balioa argumentu gisa pasatuz (hau da, myFunc(...) Closure::fromCallable('myFunc) ordez. ')): foo funtzioa (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Elkargune motetarako laguntza osoa gehitu da, lehendik daudenak konbinatuz mota berriak sortzeko aukera emanez. Batasun motak ez bezala, bi motako edo gehiagoko bildumak definitzen dituztenak, elkartze-motek ez dute zerrendatutako motarik, baizik eta multzoan zehaztutako mota guztiak bete behar izatea. function generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • Badago "inoiz" mota berri bat, analizatzaile estatikoei funtzio batek programaren exekuzioa amaituko duela jakinarazteko erabil daitekeena, adibidez, salbuespen bat botaz edo irteera funtzioa exekutatuz. dd funtzioa ($sarrera mistoa): inoiz { irten; }
  • Array_is_list funtzio berri bat proposatu da, eta horri esker, matrizeko gakoak gero eta balio numerikoen hurrenkeran ordenatuta daudela zehazten da, 0tik hasita: $zerrenda = [β€œa”, β€œb”, β€œc”]; array_is_list($zerrenda); // egia $notAList = [1 => β€œa”, 2 => β€œb”, 3 => β€œc”]; array_da_zerrenda($notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_da_zerrenda($alsoNotAList); // faltsu
  • Orain "azken" gako-hitza erabil dezakezu klase gurasoen konstanteak gainidaztea saihesteko. class Foo { final public const X = "foo"; } class Bar extends Foo { public const X = "barra"; > Errore larria: Bar::X ezin du azken konstantea gainidatzi Foo::X }
  • fsync eta fdatasync funtzioak aldaketak diskoko cachetik gordetzera behartzeko proposatzen dira. $fitxategia = fopen ("lagina.txt", "w"); fwrite($fitxategia, "Edukiren bat"); if (fsync($fitxategia)) { echo "Fitxategia ongi mantendu da diskoan."; } fclose($fitxategia);
  • Zenbaki zortzitaletarako "0o" eta "0O" aurrizkiak erabiltzeko aukera gehitu da, aurretik erabilitako "0" aurrizkiaz gain. 016 === 0o16; // egia 016 === 0O16; // egia
  • $GLOBALS-en erabilera selektiboki mugatzea proposatzen da, eta horrek atzerako bateragarritasuna urratzea ekarriko du, baina arrayekin eragiketak nabarmen bizkortzea ahalbidetuko du. Adibidez, $GLOBALS-en idazketa desgaitzeko eta $GLOBALS erakuslearen bidez pasatzeko aukera aztertzen ari da. 2000 paketeren azterketak erakutsi zuen horietatik 23ri bakarrik eragingo ziola aldaketa horrek. Esate baterako, proposamena onartzen bada, 8.1-ek ez ditu gehiago onartzen: $GLOBALS = []; $GLOBALS += []; $GLOBALAK =& $x; $x =& $GLOBALAK; unset($GLOBALS); by_ref($GLOBALS);
  • Barne metodoek mota zuzena itzuli beharko lukete orain. PHP 8.1-en, funtzio-adierazpenarekin bat ez datorren mota bat itzultzeak abisu bat sortuko du, baina PHP 9.0-n abisua errore batekin ordezkatuko da.
  • Baliabideak erabiltzeatik objektuak manipulatzera funtzioak transferitzeko lanean jarraitu zen. Finfo_* eta imap_* funtzioak objektuetara transferitu dira.
  • Balio nuluak argumentu gisa pasatzea deusezgarriak ez diren barne funtzioei zaharkituta geratu da. PHP 8.1-en, str_contains("string", null) bezalako eraikuntzak erabiltzeak abisu bat ekarriko du, eta PHP 9-n errore bat.
  • MurmurHash3 eta xxHash hashing algoritmoetarako laguntza gehitu da.

Iturria: opennet.ru

Gehitu iruzkin berria