PHP 8.1 programming language release

Pagkatapos ng isang taon ng pag-unlad, ang paglabas ng PHP 8.1 programming language ay ipinakita. Kasama sa bagong sangay ang isang serye ng mga bagong feature, pati na rin ang ilang pagbabago na sumisira sa compatibility.

Mga pangunahing pagpapabuti sa PHP 8.1:

  • Nagdagdag ng suporta para sa mga enumerasyon, halimbawa, maaari mo na ngayong gamitin ang mga sumusunod na konstruksyon: enum Status { case Pending; kaso Aktibo; kaso Naka-archive; } class Post { public function __construct( private Status $status = Status::Pending; ) {} public function setStatus(Status $status): void { // … } } $post->setStatus(Status::Active);
  • Nagdagdag ng suporta para sa magaan na mga thread na tinatawag na Fibers, na nagbibigay-daan sa iyong pamahalaan ang mga execution thread sa mababang antas. Ang suporta sa fiber ay binalak na idagdag sa Amphp at ReactPHP frameworks. $fiber = bagong Fiber(function (): void { $valueAfterResuming = Fiber::suspend('pagkatapos suspindihin'); // ... }); $valueAfterSuspending = $fiber->start(); $fiber->resume('pagkatapos ipagpatuloy');
  • Ang pagpapatupad ng object code cache (opcache) ay napabuti, na ginagawang posible ang pag-cache ng impormasyon tungkol sa class inheritance. Ang pag-optimize ay naging posible upang mapataas ang pagganap ng ilang mga application ng 5-8%. Kasama sa iba pang mga pag-optimize ang pag-optimize ng operasyon ng JIT, pagpapatupad ng suporta ng JIT para sa arkitektura ng ARM64 (AArch64), pagpapabilis ng resolution ng pangalan, pag-optimize ng timelib at ext/date na mga aklatan, pagtaas ng pagganap ng serialization at deserialization, pag-optimize ng get_declared_classes(), explode() , strtr() function, strnatcmp(), dechex(). Sa pangkalahatan, mayroong 23.0% na pagtaas sa pagganap para sa Symfony Demo, at 3.5% para sa WordPress.
  • Ang operator ng pag-unpack sa loob ng mga arrays na "...$var", na nagpapahintulot sa pagpapalit ng mga umiiral na array kapag tumutukoy ng isang bagong array, ay pinalawig upang suportahan ang mga string key (dati ay mga digital identifier lang ang sinusuportahan). Halimbawa, maaari mo na ngayong gamitin sa code: $array1 = [β€œa” => 1]; $array2 = ["b" => 2]; $array = [β€œa” => 0, …$array1, …$array2]; var_dump($array); // ["a" => 1, "b" => 2]
  • Pinapayagan na gamitin ang "bagong" keyword sa mga initializer, tulad ng sa mga kahulugan ng function bilang default na parameter o sa mga attribute ng argumento. class MyController { public function __construct( private Logger $logger = new NullLogger(), ) {} }
  • Posibleng markahan ang mga katangian ng klase para sa read-only na pag-access (ang impormasyon sa mga naturang property ay maaari lamang isulat nang isang beses, pagkatapos nito ay hindi na ito magagamit para sa pagbabago). class PostData { public function __construct( public readonly string $title, public readonly DateTimeImmutable $date, ) {} } $post = new Post('Title', /* … */); $post->title = 'Iba pa'; > Error: Hindi mababago ang readonly property Post::$title
  • Ang isang bagong syntax ay ipinatupad para sa mga matatawag na bagay - isang pagsasara ay maaari na ngayong mabuo sa pamamagitan ng pagtawag sa isang function at pagpasa dito ng halagang "..." bilang isang argumento (i.e. myFunc(...) sa halip na Closure::fromCallable('myFunc ')): function foo (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Nagdagdag ng buong suporta para sa mga uri ng intersection, na nagbibigay-daan sa iyong lumikha ng mga bagong uri sa pamamagitan ng pagsasama-sama ng mga umiiral na. Hindi tulad ng mga uri ng unyon, na tumutukoy sa mga koleksyon ng dalawa o higit pang mga uri, ang mga uri ng intersection ay nangangailangan ng presensya ng hindi alinman sa mga nakalistang uri, ngunit ang lahat ng mga tinukoy na uri sa hanay ay dapat punan. function generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • Mayroong isang bagong uri na "hindi kailanman" na maaaring magamit upang ipaalam sa mga static na analyzer na ang isang function ay magwawakas sa pagpapatupad ng programa, halimbawa sa pamamagitan ng paghahagis ng exception o pagpapatupad ng exit function. function dd(mixed $input): never { exit; }
  • Ang isang bagong function array_is_list ay iminungkahi, na nagbibigay-daan sa iyo upang matukoy na ang mga susi sa array ay nakaayos sa pagkakasunud-sunod ng pagtaas ng mga numerical na halaga, simula sa 0: $list = [β€œa”, β€œb”, β€œc”]; array_is_list($list); // true $notAList = [1 => β€œa”, 2 => β€œb”, 3 => β€œc”]; array_is_list($notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // mali
  • Magagamit mo na ngayon ang "panghuling" keyword upang maiwasang ma-override ang mga pare-pareho ng parent class. class Foo { final public const X = "foo"; } class Bar extends Foo { public const X = "bar"; > Malalang error: Hindi ma-override ng Bar::X ang final constant Foo::X }
  • Ang mga function ng fsync at fdatasync ay iminungkahi upang pilitin ang mga pagbabago na i-save mula sa cache ng disk. $file = fopen("sample.txt", "w"); fwrite($file, "Ilang nilalaman"); if (fsync($file)) { echo "Ang file ay matagumpay na naituloy sa disk."; } fclose($file);
  • Idinagdag ang kakayahang gamitin ang mga prefix na "0o" at "0O" para sa mga octal na numero, bilang karagdagan sa dating ginamit na prefix na "0". 016 === 0o16; // true 016 === 0O16; // totoo
  • Iminumungkahi na piliing limitahan ang paggamit ng $GLOBALS, na hahantong sa isang paglabag sa backward compatibility, ngunit gagawing posible na makabuluhang mapabilis ang mga operasyon gamit ang mga array. Halimbawa, ang posibilidad na hindi paganahin ang pagsulat sa $GLOBALS at pagpasa ng $GLOBALS sa pamamagitan ng pointer ay isinasaalang-alang. Ang pagsusuri sa 2000 na pakete ay nagpakita na 23 lamang sa kanila ang maaapektuhan ng pagbabagong ito. Halimbawa, kung naaprubahan ang panukala, hindi na susuportahan ng 8.1 ang mga expression tulad ng: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBALS; unset($GLOBALS); by_ref($GLOBALS);
  • Ang mga panloob na pamamaraan ay dapat na ngayong ibalik ang tamang uri. Sa PHP 8.1, ang pagbabalik ng isang uri na hindi tumutugma sa deklarasyon ng function ay magdudulot ng babala, ngunit sa PHP 9.0 ang babala ay papalitan ng isang error.
  • Nagpatuloy ang trabaho sa paglilipat ng mga function mula sa paggamit ng mga mapagkukunan patungo sa pagmamanipula ng mga bagay. Ang mga function ng fifo_* at imap_* ay inilipat sa mga bagay.
  • Ang pagpasa ng mga null na halaga bilang mga argumento sa mga panloob na function na minarkahan ng hindi nullable ay hindi na ginagamit. Sa PHP 8.1, ang paggamit ng mga construct tulad ng str_contains("string", null) ay hahantong sa isang babala, at sa PHP 9 sa isang error.
  • Nagdagdag ng suporta para sa MurmurHash3 at xxHash hashing algorithm.

Pinagmulan: opennet.ru

Magdagdag ng komento