Rhyddhau iaith raglennu PHP 8.1

Ar ôl blwyddyn o ddatblygiad, cyflwynwyd rhyddhau iaith raglennu PHP 8.1. Mae'r gangen newydd yn cynnwys cyfres o nodweddion newydd, yn ogystal â nifer o newidiadau sy'n torri cydnawsedd.

Gwelliannau allweddol yn PHP 8.1:

  • Cefnogaeth ychwanegol ar gyfer cyfrifiadau, er enghraifft, gallwch nawr ddefnyddio'r lluniadau canlynol: enum Status { case Pending; achos Actif; achos Archif; } dosbarth Post { swyddogaeth gyhoeddus __construct( preifat Statws $status = Statws::Yn aros; ) {} setStatus swyddogaeth gyhoeddus(Statws $status): gwag {// … } } $post->setStatus(Statws::Active);
  • Cefnogaeth ychwanegol ar gyfer edafedd ysgafn o'r enw Ffibrau, sy'n eich galluogi i reoli edafedd gweithredu ar lefel isel. Bwriedir ychwanegu cymorth ffibr i fframweithiau Amphp ac ReactPHP. $fiber = Ffibr newydd(swyddogaeth (): gwag { $valueAfterResuming = Ffibr:: atal ('ar ôl atal'); // ... }); $valueAfterSuspending = $fiber->start(); $fiber->ailddechrau('ar ôl ailddechrau');
  • Mae gweithrediad y storfa cod gwrthrych (opcache) wedi'i wella, gan ei gwneud hi'n bosibl storio gwybodaeth am etifeddiaeth dosbarth. Roedd optimeiddio yn ei gwneud hi'n bosibl cynyddu perfformiad rhai ceisiadau 5-8%. Mae optimeiddio eraill yn cynnwys optimeiddio gweithrediad JIT, gweithredu cefnogaeth JIT ar gyfer pensaernïaeth ARM64 (AAarch64), cyflymu datrysiad enwau, optimeiddio llyfrgelloedd amsereb a est/dyddiad, mwy o berfformiad cyfresoli a dad-gyfresi, optimeiddio dosbarthiadau get_declared_(), ffrwydro() , strtr() ffwythiant, strnatcmp(), dechex(). Yn gyffredinol, mae cynnydd o 23.0% mewn perfformiad ar gyfer Symfony Demo, a 3.5% ar gyfer WordPress.
  • Mae'r gweithredwr dadbacio y tu mewn i araeau "...$var", sy'n caniatáu amnewid araeau presennol wrth ddiffinio arae newydd, wedi'i ymestyn i gefnogi bysellau llinynnol (yn flaenorol dim ond dynodwyr digidol a gefnogwyd). Er enghraifft, gallwch nawr ddefnyddio yn y cod: $array1 = [“a” => 1]; $array2 = [ "b" => 2]; $array = [“a” => 0, …$array1, …$array2]; var_dump($array); // [ " a " => 1, "b" => 2]
  • Caniateir iddo ddefnyddio'r allweddair "newydd" mewn cychwynwyr, megis mewn diffiniadau swyddogaeth fel paramedr rhagosodedig neu mewn priodoleddau dadl. dosbarth MyController { swyddogaeth gyhoeddus __construct( Logger preifat $ logger = NullLogger newydd( ), ) {} }
  • Mae'n bosibl marcio priodweddau dosbarth ar gyfer mynediad darllen yn unig (dim ond unwaith y gellir ysgrifennu gwybodaeth mewn eiddo o'r fath, ac ar ôl hynny ni fydd ar gael i'w newid). dosbarth PostData { swyddogaeth gyhoeddus __construct(llinyn darllen cyhoeddus yn unig $title, darllen yn unig cyhoeddus DateTimeImmutable $date, ) {} } $ post = Postiad newydd('Teitl', /* … */); $post->title = 'Arall'; > Gwall: Methu addasu priodwedd darllen yn unig Post::$title
  • Mae cystrawen newydd wedi'i rhoi ar waith ar gyfer gwrthrychau y gellir eu galw - gall cau nawr gael ei ffurfio trwy alw ffwythiant a'i basio â'r gwerth "..." fel dadl (h.y. myFunc(...) yn lle Cau::fromCallable('myFunc) ')): ffwythiant foo (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Ychwanegwyd cefnogaeth lawn ar gyfer mathau croestoriad, sy'n eich galluogi i greu mathau newydd trwy gyfuno'r rhai presennol. Yn wahanol i fathau o undeb, sy'n diffinio casgliadau o ddau fath neu fwy, mae mathau croestoriad yn gofyn am bresenoldeb nid unrhyw un o'r mathau rhestredig, ond pob un o'r mathau penodedig yn y set i'w llenwi. swyddogaeth GenerationSlug(HasTitle&HasId $post) { dychwelyd strtolower($post->getTitle()). $post->getId(); }
  • Mae yna fath newydd "byth" y gellir ei ddefnyddio i hysbysu dadansoddwyr statig y bydd swyddogaeth yn terfynu gweithrediad rhaglen, er enghraifft trwy daflu eithriad neu weithredu'r swyddogaeth ymadael. ffwythiant dd(cymysg $input): byth { ymadael; }
  • Mae array_is_list swyddogaeth newydd wedi'i gynnig, sy'n eich galluogi i benderfynu bod yr allweddi yn yr arae wedi'u trefnu yn nhrefn gwerthoedd rhifiadol cynyddol, gan ddechrau o 0: $list = [“a”, “b”, “c”]; array_is_list($ rhestr); // true $notAList = [1 => “a”, 2 => “b”, 3 => “c”]; array_is_list($ notAList); // false $alsoNotAList = [ "a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // anwir
  • Gallwch nawr ddefnyddio'r allweddair "terfynol" i atal cysonion dosbarth rhiant rhag cael eu diystyru. class Foo { final public const X = "foo"; } class Bar yn ymestyn Foo { public const X = "bar"; > Gwall angheuol: Bar::Ni all X ddiystyru cysonyn terfynol Foo::X }
  • Cynigir y swyddogaethau fsync a fdatasync i orfodi newidiadau i gael eu cadw o'r storfa ddisg. $file = fopen("sample.txt", "w"); fwrite($file, "Rhai cynnwys"); if (fsync($file)) { echo "Mae'r ffeil wedi'i pharhau'n llwyddiannus i ddisg."; } fclose($ffeil);
  • Ychwanegwyd y gallu i ddefnyddio'r rhagddodiaid "0o" a "0O" ar gyfer rhifau wythol, yn ychwanegol at y rhagddodiad "0" a ddefnyddiwyd yn flaenorol. 016 === 0o16; // true 016 === 0O16; // wir
  • Cynigir cyfyngu'n ddetholus ar y defnydd o $GLOBALS, a fydd yn arwain at dorri cydnawsedd yn ôl, ond a fydd yn ei gwneud hi'n bosibl cyflymu gweithrediadau araeau yn sylweddol. Er enghraifft, mae'r posibilrwydd o analluogi ysgrifennu at $GLOBALS a phasio $GLOBALS trwy bwyntydd yn cael ei ystyried. Dangosodd dadansoddiad o 2000 o becynnau mai dim ond 23 ohonynt fyddai'n cael eu heffeithio gan y newid hwn. Er enghraifft, os caiff y cynnig ei gymeradwyo, ni fydd 8.1 bellach yn cefnogi ymadroddion fel: $GLOBALS = []; $GLOBALS +=[]; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
  • Dylai dulliau mewnol nawr ddychwelyd y math cywir. Yn PHP 8.1, bydd dychwelyd math nad yw'n cyfateb i'r datganiad swyddogaeth yn cynhyrchu rhybudd, ond yn PHP 9.0 bydd gwall yn cael ei ddisodli.
  • Parhaodd y gwaith o drosglwyddo swyddogaethau o ddefnyddio adnoddau i drin gwrthrychau. Mae'r ffwythiannau finfo_* ac imap_* wedi'u trosglwyddo i wrthrychau.
  • Mae pasio gwerthoedd nwl fel dadleuon i swyddogaethau mewnol sydd wedi'u marcio'n an-nulladwy wedi'i anghymeradwyo. Yn PHP 8.1, bydd defnyddio lluniadau fel str_contains ("string", null) yn arwain at rybudd, ac yn PHP 9 at wall.
  • Cefnogaeth ychwanegol ar gyfer algorithmau stwnsio MurmurHash3 a xxHash.

Ffynhonnell: opennet.ru

Ychwanegu sylw