Rilis basa pemrograman PHP 8.1

Sawise setahun pembangunan, release saka PHP 8.1 basa program presented. Cabang anyar kalebu seri fitur anyar, uga sawetara owah-owahan sing break kompatibilitas.

Peningkatan utama ing PHP 8.1:

  • Dhukungan sing ditambahake kanggo enumerasi, contone, sampeyan saiki bisa nggunakake konstruksi ing ngisor iki: enum Status { case Pending; kasus Aktif; kasus Arsip; } class Post { public function __construct( private Status $status = Status :: Pending; ) {} public function setStatus(Status $status): void { // … } } $post->setStatus(Status::Active);
  • Dhukungan tambahan kanggo benang entheng sing diarani Serat, sing ngidini sampeyan ngatur benang eksekusi ing tingkat sing sithik. Dhukungan serat direncanakake bakal ditambahake menyang kerangka Amphp lan ReactPHP. $fiber = new Fiber(function(): void {$valueAfterResuming = Fiber::suspend('sawise suspending'); // ... }); $valueAfterSuspending = $serat->miwiti(); $fiber->resume('sawise diterusake');
  • Implementasine saka cache kode obyek (opcache) wis apik, ndadekake iku bisa kanggo cache informasi bab warisan kelas. Optimization ndadekake iku bisa kanggo nambah kinerja sawetara aplikasi dening 5-8%. Optimizations liyane kalebu Optimization saka operasi JIT, implementasine saka support JIT kanggo arsitektur ARM64 (AArch64), percepatan saka rΓ©solusi jeneng, Optimization saka perpustakaan timelib lan ext/tanggal, tambah kinerja serialization lan deserialization, Optimization saka get_declared_classes (), njeblug () , fungsi strtr(), strnatcmp(), dechex(). UmumΓ©, ana peningkatan 23.0% ing kinerja kanggo Symfony Demo, lan 3.5% kanggo WordPress.
  • Operator unpacking ing jero array "...$var", sing ngidini substitusi array sing wis ana nalika nemtokake array anyar, wis ditambahake kanggo ndhukung tombol string (sadurunge mung pengenal digital sing didhukung). Contone, sampeyan saiki bisa nggunakake kode: $array1 = ["a" => 1]; $array2 = ["b" => 2]; $array = [β€œa” => 0, …$array1, …$array2]; var_dump($array); // ["a" => 1, "b" => 2]
  • Diijini nggunakake tembung kunci "anyar" ing wiwitan, kayata ing definisi fungsi minangka parameter standar utawa ing atribut argumen. class MyController { public function __construct( private Logger $logger = new NullLogger(), ) {} }
  • Sampeyan bisa menehi tandha properti kelas kanggo akses mung diwaca (informasi ing properti kasebut mung bisa ditulis sapisan, sawise iku ora bakal kasedhiya kanggo owah-owahan). class PostData { public function __construct( public readonly string $title, public readonly DateTimeImmutable $date, ) {} } $post = new Post('Judul', /* … */); $post->title = 'Liyane'; > Kasalahan: Ora bisa ngowahi properti mung diwaca Post::$title
  • Sintaks anyar wis dileksanakake kanggo obyek sing bisa diarani - penutupan saiki bisa dibentuk kanthi nelpon fungsi lan menehi nilai "..." minangka argumen (yaiku myFunc(...) tinimbang Closure::fromCallable('myFunc). ')): function foo (int $a, int $b) { /* … */ } $foo = foo(...); $foo(a: 1, b: 2);
  • Nambahake dhukungan lengkap kanggo jinis persimpangan, ngidini sampeyan nggawe jinis anyar kanthi nggabungake sing wis ana. Ora kaya jinis union, sing nemtokake koleksi saka loro utawa luwih jinis, jinis persimpangan mbutuhake ora ana jinis sing kadhaptar, nanging kabeh jinis sing ditemtokake ing set kudu diisi. function generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()). $post->getId(); }
  • Ana jinis anyar "ora tau" sing bisa digunakake kanggo ngandhani analisa statis yen fungsi bakal mungkasi eksekusi program, contone kanthi mbuwang pengecualian utawa nglakokake fungsi metu. fungsi dd(campuran $input): tau {metu; }
  • A array_is_list fungsi anyar wis ngajokaken, sing ngijini sampeyan kanggo nemtokake sing tombol ing Uploaded disusun ing urutan nambah angka numerik, miwiti saka 0: $ dhaftar = ["a", "b", "c"]; array_is_list($daftar); // bener $notAList = [1 => "a", 2 => "b", 3 => "c"]; array_is_list($notALlist); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($ugaNotAList); // palsu
  • Sampeyan saiki bisa nggunakake tembung kunci "final" kanggo nyegah konstanta kelas induk supaya ora diganti. class Foo { final public const X = "foo"; } class Bar ngluwihi Foo { public const X = "bar"; > Kesalahan fatal: Bar:: X ora bisa ngilangi konstanta pungkasan Foo::X }
  • Fungsi fsync lan fdatasync diusulake kanggo meksa owah-owahan supaya disimpen saka cache disk. $file = fopen("sample.txt", "w"); fwrite($file, "Sawetara konten"); if (fsync($file)) {echo "File wis kasil disimpen ing disk."; } flose($file);
  • Ditambahake kemampuan kanggo nggunakake ater-ater "0o" lan "0O" kanggo nomer oktal, saliyane prefiks "0" sing digunakake sadurunge. 016 === 0o16; // bener 016 === 0O16; // bener
  • Ngajokaken selektif matesi panggunaan $ GLOBALS, kang bakal mimpin kanggo nglanggar kompatibilitas sakdurunge, nanging bakal nggawe iku bisa kanggo Ngartekno nyepetake operasi karo susunan. Contone, kamungkinan mateni nulis kanggo $GLOBALS lan maringaken $GLOBALS dening pointer lagi dianggep. Analisis 2000 paket nuduhake yen mung 23 sing bakal kena pengaruh owah-owahan iki. Contone, yen proposal disetujoni, 8.1 ora bakal ndhukung ekspresi kayata: $GLOBALS = []; $GLOBAL += []; $GLOBALS =& $x; $x =& $GLOBAL; unset($GLOBALS); by_ref($GLOBAL);
  • Cara internal saiki kudu ngasilake jinis sing bener. Ing PHP 8.1, ngasilake jinis sing ora cocog karo deklarasi fungsi bakal ngasilake bebaya, nanging ing PHP 9.0 bebaya bakal diganti karo kesalahan.
  • Karya terus kanggo nransfer fungsi saka nggunakake sumber daya kanggo manipulasi obyek. Fungsi finfo_* lan imap_* wis ditransfer menyang obyek.
  • Ngliwati nilai null minangka argumen kanggo fungsi internal sing ditandhani non-nullable wis ora digunakake. Ing PHP 8.1, nggunakake konstruksi kaya str_contains("string", null) bakal nyebabake bebaya, lan ing PHP 9 ana kesalahan.
  • Dhukungan ditambahake kanggo algoritma hashing MurmurHash3 lan xxHash.

Source: opennet.ru

Add a comment