PHP 8.1 release basa programming

Sanggeus sataun pangwangunan, sékrési basa programming PHP 8.1 dibere. Cabang anyar ngawengku runtuyan fitur anyar, kitu ogé sababaraha parobahan nu megatkeun kasaluyuan.

Perbaikan konci dina PHP 8.1:

  • Ditambahkeun rojongan pikeun enumerations, contona, anjeun ayeuna bisa ngagunakeun constructs handap: enum Status {kasus Pending; kasus aktip; kasus diarsipkeun; } kelas Post {fungsi publik __construct (Status swasta $ status = Status:: Ditunda;) {} fungsi publik setStatus (Status $ status): batal {// ... }} $ post-> setStatus (Status:: Aktif);
  • Ditambahkeun dukungan pikeun benang anu ringan anu disebut Serat, anu ngamungkinkeun anjeun ngatur benang palaksanaan dina tingkat anu rendah. Pangrojong serat rencanana bakal ditambah kana kerangka Amphp sareng ReactPHP. $serat = Serat anyar (fungsi (): batal {$valueAfterResuming = Serat:: nunda ( 'sanggeus suspending'); // ... }); $ valueAfterSuspending = $ serat-> ngamimitian (); $fiber->resume( 'sanggeus neruskeun');
  • Palaksanaan cache kode obyék (opcache) geus ningkat, sahingga bisa cache informasi ngeunaan warisan kelas. Optimasi ngamungkinkeun pikeun ningkatkeun kinerja sababaraha aplikasi ku 5-8%. optimizations séjén kaasup optimasi operasi JIT, palaksanaan rojongan JIT pikeun arsitektur ARM64 (AArch64), akselerasi resolusi ngaran, optimasi timelib na ext / perpustakaan titimangsa, ngaronjat serialization jeung kinerja deserialization, optimasi get_declared_classes (), ngabeledug () , strtr() fungsi, strnatcmp(), dechex(). Sacara umum, aya paningkatan 23.0% dina kinerja pikeun Symfony Demo, sareng 3.5% pikeun WordPress.
  • Operator unpacking di jero arrays "...$var", anu ngamungkinkeun substitusi arrays aya nalika nangtukeun arrays anyar, geus diperpanjang pikeun ngarojong konci string (saméméhna ukur identifiers digital anu didukung). Contona, ayeuna anjeun tiasa nganggo kode: $array1 = ["a" => 1]; $array2 = ["b" => 2]; $array = [“a” => 0, …$array1, …$array2]; var_dump($array); // ["a" => 1, "b" => 2]
  • Hal ieu diidinan ngagunakeun kecap konci "anyar" dina inisialisasi, sapertos dina definisi fungsi salaku parameter standar atanapi dina atribut argumen. kelas MyController {fungsi umum __construct (pribadi Logger $ logger = NullLogger anyar (), ) {} }
  • Kasebut nyaéta dimungkinkeun pikeun nandaan sipat kelas pikeun aksés dibaca wungkul (inpormasi dina sipat sapertos ngan bisa ditulis sakali, sanggeus éta moal sadia pikeun robah). class PostData {fungsi publik __construct(public readonly string $judul, public readonly DateTimeImmutable $date,) {}} $post = new Post('Judul', /* ... */); $post->judul = 'Lain'; > Kasalahan: Teu bisa ngarobah sipat readonly Post::$judul
  • Sintaksis anyar parantos dilaksanakeun pikeun obyék anu tiasa ditelepon - panutupanana ayeuna tiasa dibentuk ku nyauran fungsi sareng masihan nilai "..." salaku argumen (nyaéta myFunc(...) tinimbang Closure::fromCallable('myFunc). ')): fungsi foo (int $a, int $b) { /* … */ } $foo = foo(...); $foo(a: 1, b: 2);
  • Ditambahkeun dukungan lengkep pikeun jinis simpang, ngamungkinkeun anjeun nyiptakeun jinis énggal ku ngagabungkeun anu tos aya. Beda sareng jinis union, anu ngahartikeun kumpulan dua atanapi langkung jinis, jinis simpang meryogikeun ayana henteu salah sahiji jinis anu didaptarkeun, tapi sadayana jinis anu ditunjuk dina set anu kedah dieusi. fungsi generateSlug (HasTitle & HasId $ pos) {balik strtolower ($ pos-> getTitle ()). $post->getId(); }
  • Aya tipe anyar "pernah" nu bisa dipaké pikeun nginpokeun analis statik yén hiji fungsi bakal nungtungan palaksanaan program, contona ku ngalungkeun iwal atawa ngajalankeun fungsi kaluar. fungsi dd (campuran $ input): pernah {kaluar; }
  • A array_is_list fungsi anyar geus diajukeun, nu ngidinan Anjeun pikeun nangtukeun yén kenop dina Asép Sunandar Sunarya disusun dina urutan ngaronjatkeun nilai numeris, mimitian ti 0: $ daptar = ["a", "b", "c"]; array_is_list ($ daptar); // leres $ notAList = [1 => "a", 2 => "b", 3 => "c"]; array_is_list ($notAList); // palsu $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list ($ogéNotAList); // palsu
  • Anjeun ayeuna bisa make kecap konci "final" pikeun nyegah konstanta kelas indungna ti keur overridden. kelas Foo {const publik final X = "foo"; } kelas Bar ngalegaan Foo {const publik X = "bar"; > Kasalahan fatal: Bar::X teu bisa nimpa konstanta final Foo::X }
  • Fungsi fsync sareng fdatasync diusulkeun pikeun maksakeun parobahan disimpen tina cache disk. $file = fopen("sample.txt", "w"); fwrite ($ file, "Sababaraha eusi"); upami (fsync ($ file)) { echo "File parantos suksés disimpen kana disk."; } fclose ($ file);
  • Ditambahkeun kamampuh ngagunakeun awalan "0o" jeung "0O" pikeun wilangan octal, salian ti awalan dipaké saméméhna "0". 016 === 0o16; // leres 016 === 0O16; // leres
  • Diajukeun pikeun selektif ngawatesan pamakéan $ GLOBALS, nu bakal ngakibatkeun palanggaran kasaluyuan mundur, tapi bakal nyieun mungkin mun nyata nyepetkeun operasi kalawan arrays. Salaku conto, kamungkinan nganonaktipkeun tulisan ka $ GLOBALS sareng ngalangkungan $ GLOBALS ku pointer dianggap. Analisis 2000 bungkusan nunjukkeun yén ngan 23 di antarana bakal kapangaruhan ku parobahan ieu. Contona, upami proposal disatujuan, 8.1 moal deui ngarojong ekspresi kayaning: $ GLOBALS = []; $GLOBALS += []; $ GLOBALS = & $ x; $ x = & $ GLOBALS; unset ($ GLOBALS); by_ref ($ GLOBALS);
  • Métode internal ayeuna kedah mulangkeun jinis anu leres. Dina PHP 8.1, mulangkeun jinis anu henteu cocog sareng deklarasi fungsi bakal ngahasilkeun peringatan, tapi dina PHP 9.0 peringatan bakal diganti ku kasalahan.
  • Gawé dituluykeun dina nransferkeun fungsi tina ngagunakeun sumberdaya pikeun ngamanipulasi objék. Fungsi finfo_* jeung imap_* geus dialihkeun ka objék.
  • Ngalirkeun nilai null salaku argumen pikeun fungsi internal ditandaan non-nullable geus deprecated. Dina PHP 8.1, ngagunakeun constructs kawas str_contains("string", null) bakal ngakibatkeun peringatan, sarta dina PHP 9 mun kasalahan.
  • Ditambahkeun dukungan pikeun algoritma hashing MurmurHash3 sareng xxHash.

sumber: opennet.ru

Tambahkeun komentar