Rilis bahasa pemrograman PHP 8.1

Setelah satu tahun pengembangan, rilis bahasa pemrograman PHP 8.1 dipresentasikan. Cabang baru ini mencakup serangkaian fitur baru, serta beberapa perubahan yang merusak kompatibilitas.

Peningkatan utama dalam PHP 8.1:

  • Menambahkan dukungan untuk enumerasi, misalnya, Anda sekarang dapat menggunakan konstruksi berikut: enum Status { case Pending; kasus Aktif; kasus Diarsipkan; } class Posting { fungsi publik __konstruksi( Status pribadi $status = Status::Tertunda; ) {} fungsi publik setStatus(Status $status): void { // … } } $post->setStatus(Status::Aktif);
  • Menambahkan dukungan untuk thread ringan yang disebut Fibers, yang memungkinkan Anda mengelola thread eksekusi pada tingkat rendah. Dukungan fiber rencananya akan ditambahkan ke framework Amphp dan ReactPHP. $fiber = new Fiber(function (): void { $valueAfterResuming = Fiber::suspend('after suspend'); // ... }); $valueAfterSuspending = $fiber->start(); $fiber->resume('setelah melanjutkan');
  • Implementasi cache kode objek (opcache) telah ditingkatkan, sehingga memungkinkan untuk menyimpan informasi tentang warisan kelas dalam cache. Optimasi memungkinkan peningkatan kinerja beberapa aplikasi sebesar 5-8%. Optimalisasi lainnya termasuk optimalisasi operasi JIT, implementasi dukungan JIT untuk arsitektur ARM64 (AArch64), akselerasi resolusi nama, optimalisasi pustaka timelib dan ext/date, peningkatan kinerja serialisasi dan deserialisasi, optimalisasi get_declared_classes(), meledak() , fungsi strtr(), strnatcmp(), dechex(). Secara umum, terjadi peningkatan performa sebesar 23.0% untuk Symfony Demo, dan 3.5% untuk WordPress.
  • Operator pembongkaran di dalam array "...$var", yang memungkinkan substitusi array yang ada saat mendefinisikan array baru, telah diperluas untuk mendukung kunci string (sebelumnya hanya pengidentifikasi digital yang didukung). Misalnya, Anda sekarang dapat menggunakan kode: $array1 = [β€œa” => 1]; $array2 = ["b" => 2]; $array = [β€œa” => 0, …$array1, …$array2]; var_dump($array); //["a" => 1, "b" => 2]
  • Diperbolehkan menggunakan kata kunci "baru" dalam inisialisasi, seperti dalam definisi fungsi sebagai parameter default atau dalam atribut argumen. kelas MyController { fungsi publik __konstruksi( Logger pribadi $logger = NullLogger baru(), ) {} }
  • Dimungkinkan untuk menandai properti kelas untuk akses hanya-baca (informasi dalam properti tersebut hanya dapat ditulis satu kali, setelah itu tidak akan tersedia untuk diubah). class PostData { fungsi publik __konstruksi( string hanya baca publik $judul, DateTimeImmutable $tanggal hanya baca publik, ) {} } $posting = Posting baru('Judul', /* … */); $post->judul = 'Lainnya'; > Kesalahan: Tidak dapat mengubah properti readonly Post::$title
  • Sintaks baru telah diterapkan untuk objek yang dapat dipanggil - penutupan kini dapat dibentuk dengan memanggil fungsi dan meneruskan nilai "..." sebagai argumen (yaitu myFunc(...) alih-alih Closure::fromCallable('myFunc ')): fungsi foo (int $a, int $b) { /* … */ } $foo = foo(…); $foo(a: 1, b: 2);
  • Menambahkan dukungan penuh untuk tipe persimpangan, memungkinkan Anda membuat tipe baru dengan menggabungkan yang sudah ada. Tidak seperti tipe gabungan, yang mendefinisikan kumpulan dua tipe atau lebih, tipe persimpangan tidak memerlukan kehadiran salah satu tipe yang terdaftar, tetapi semua tipe tertentu dalam himpunan untuk diisi. fungsi generateSlug(HasTitle&HasId $post) { return strtolower($post->getTitle()) . $post->getId(); }
  • Ada tipe baru "tidak pernah" yang dapat digunakan untuk memberi tahu penganalisis statis bahwa suatu fungsi akan menghentikan eksekusi program, misalnya dengan melemparkan pengecualian atau menjalankan fungsi keluar. fungsi dd(campuran $input): tidak pernah { keluar; }
  • Fungsi baru array_is_list telah diusulkan, yang memungkinkan Anda menentukan bahwa kunci dalam array disusun berdasarkan kenaikan nilai numerik, mulai dari 0: $list = [β€œa”, β€œb”, β€œc”]; array_is_list($daftar); // benar $notAList = [1 => β€œa”, 2 => β€œb”, 3 => β€œc”]; array_is_list($notAList); // false $alsoNotAList = ["a" => "a", "b" => "b", "c" => "c"]; array_is_list($alsoNotAList); // PALSU
  • Anda sekarang dapat menggunakan kata kunci "final" untuk mencegah konstanta kelas induk diganti. kelas Foo { final public const X = "foo"; } kelas Bar meluas Foo { public const X = "bar"; > Kesalahan fatal: Bar::X tidak dapat mengganti konstanta akhir Foo::X }
  • Fungsi fsync dan fdatasync diusulkan untuk memaksa perubahan disimpan dari cache disk. $file = fopen("sample.txt", "w"); fwrite($file, "Beberapa konten"); if (fsync($file)) { echo "File telah berhasil disimpan ke disk."; } fclose($file);
  • Menambahkan kemampuan untuk menggunakan awalan "0o" dan "0O" untuk bilangan oktal, selain awalan "0" yang digunakan sebelumnya. 016 === 0o16; // benar 016 === 0O16; // BENAR
  • Diusulkan untuk membatasi penggunaan $GLOBALS secara selektif, yang akan mengakibatkan pelanggaran kompatibilitas ke belakang, namun akan memungkinkan untuk mempercepat operasi dengan array secara signifikan. Misalnya, kemungkinan menonaktifkan penulisan ke $GLOBALS dan meneruskan $GLOBALS dengan penunjuk sedang dipertimbangkan. Analisis terhadap 2000 paket menunjukkan bahwa hanya 23 paket yang akan terkena dampak perubahan ini. Misalnya, jika proposal disetujui, 8.1 tidak lagi mendukung ekspresi seperti: $GLOBALS = []; $GLOBALS += []; $GLOBALS =& $x; $x =& $GLOBAL; tidak disetel($GLOBALS); by_ref($GLOBALS);
  • Metode internal sekarang harus mengembalikan tipe yang benar. Di PHP 8.1, mengembalikan tipe yang tidak cocok dengan deklarasi fungsi akan menghasilkan peringatan, tetapi di PHP 9.0 peringatan tersebut akan diganti dengan kesalahan.
  • Pekerjaan dilanjutkan pada pengalihan fungsi dari penggunaan sumber daya ke manipulasi objek. Fungsi finfo_* dan imap_* telah ditransfer ke objek.
  • Meneruskan nilai null sebagai argumen ke fungsi internal yang ditandai non-nullable sudah tidak digunakan lagi. Di PHP 8.1, penggunaan konstruksi seperti str_contains("string", null) akan menghasilkan peringatan, dan di PHP 9 menyebabkan kesalahan.
  • Menambahkan dukungan untuk algoritma hashing MurmurHash3 dan xxHash.

Sumber: opennet.ru

Tambah komentar