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);
  • Dukungan tambahan untuk thread ringan yang disebut fiber, yang memungkinkan manajemen thread tingkat rendah. Dukungan fiber direncanakan untuk framework Amphp dan ReactPHP. $fiber = new Fiber(function()): void { $valueAfterResuming = Fiber::suspend('setelah penangguhan'); // … }); $valueAfterSuspending = $fiber->start(); $fiber->resume('setelah melanjutkan');
  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° рСализация кэша ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° (opcache), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ наслСдовании классов. ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° 5-8%. Из Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ отмСчаСтся оптимизация Ρ€Π°Π±ΠΎΡ‚Ρ‹ JIT, рСализация ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ JIT для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ARM64 (AArch64), ускорСниС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΠΌΡ‘Π½, оптимизация Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ timelib ΠΈ ext/date, ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ сСриализации ΠΈ дСсСриализации, оптимизация функция get_declared_classes(), explode(), strtr(), strnatcmp(), dechex(). Π’ ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ отмСчаСтся ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Symfony Demo Π½Π° 23.0%, Π° WordPress 3.5%.
  • 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]
  • Kata kunci "baru" diperbolehkan dalam inisialisasi, seperti dalam definisi fungsi sebagai parameter default atau dalam atribut argumen. class MyController { public function __construct( private Logger $logger = new NullLogger(), ) {} }
  • Sekarang memungkinkan untuk menandai properti kelas untuk akses baca-saja (informasi dalam properti tersebut hanya dapat ditulis satu kali, setelah itu tidak akan tersedia untuk modifikasi). class PostData { public function __construct( public readonly string $title, public readonly DateTimeImmutable $date, ) {} } $post = new Post('Title', /* … */); $post->title = 'Other'; > Error: Tidak dapat memodifikasi properti baca-saja Post::$title
  • Sintaks baru untuk objek yang dapat dipanggil telah diterapkan - penutupan sekarang dapat dibentuk dengan memanggil fungsi dan memberikan nilai "..." sebagai argumen (misalnya myFunc(...) alih-alih Closure::fromCallable('myFunc')): function foo(int $a, int $b) { /* ... */ } $foo = foo(...); $foo(a: 1, b: 2);
  • Dukungan penuh untuk tipe interseksi telah ditambahkan, memungkinkan Anda membuat tipe baru dengan menggabungkan tipe yang sudah ada. Tidak seperti tipe gabungan, yang mendefinisikan koleksi dua tipe atau lebih, tipe interseksi mengharuskan semua tipe yang ditentukan ada dalam set yang diisi, bukan hanya salah satu tipe yang terdaftar. function 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 penggantian konstanta dari kelas induk. class Foo { final public const X = "foo"; } class Bar extends Foo { public const X = "bar"; > Fatal error: Bar::X tidak dapat mengganti konstanta final 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 sesuai dengan deklarasi fungsi akan menghasilkan peringatan, tetapi di PHP 9.0, peringatan ini akan digantikan 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

Beli hosting yang andal untuk situs dengan perlindungan DDoS, server VPS VDS πŸ”₯ Beli hosting website andal dengan perlindungan DDoS, server VPS VDS | ProHoster