Rilis bahasa pemrograman PHP 8.2

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

Peningkatan utama dalam PHP 8.2:

  • Menambahkan kemampuan untuk menandai kelas sebagai hanya-baca. Properti di kelas tersebut hanya dapat disetel sekali, setelah itu tidak akan tersedia untuk diubah. Sebelumnya, properti kelas individu dapat ditandai hanya-baca, tetapi sekarang Anda dapat mengaktifkan mode ini untuk semua properti kelas sekaligus. Menentukan flag "readonly" di tingkat kelas juga memblokir penambahan dinamis properti ke kelas. kelas hanya baca Posting { public function __construct( public string $title, Public Author $author, ) {} } $post = new Post(/* … */); $post->unknown = 'salah'; // Error: Tidak dapat membuat properti dinamis Post::$unknown
  • Menambahkan tipe terpisah "benar", "salah" dan "null", yang hanya dapat mengambil satu nilai valid dan digunakan, misalnya, untuk mengembalikan fungsi dengan tanda penghentian kesalahan atau nilai kosong. Sebelumnya, β€œtrue”, β€œfalse” dan β€œnull” hanya dapat digunakan bersama dengan tipe lain (misalnya, β€œstring|false”), namun sekarang dapat digunakan secara terpisah: function selaluFalse(): false { return false ; }
  • Memberikan kemampuan untuk memfilter pengaturan sensitif dalam keluaran pelacakan tumpukan pada saat terjadi kesalahan. Memotong informasi tertentu mungkin diperlukan saat informasi tentang kesalahan yang terjadi dikirim secara otomatis ke layanan pihak ketiga yang melacak masalah dan memberi tahu pengembang tentangnya. Misalnya, Anda dapat mengecualikan parameter dari pelacakan yang menyertakan nama pengguna, sandi, dan variabel lingkungan. function test( $foo, #[\SensitiveParameter] $password, $baz ) { throw new Exception('Error'); } test('foo', 'password', 'baz'); Kesalahan fatal: Pengecualian Tidak Tertangkap: Kesalahan dalam test.php:8 Pelacakan tumpukan: #0 test.php(11): test('foo', Object(SensitiveParameterValue), 'baz') #1 {main} dilemparkan ke dalam test.php pada baris 8
  • Diizinkan untuk mendefinisikan konstanta dalam sifat (sifat, mekanisme untuk menggunakan kembali kode). Konstanta yang didefinisikan dalam suatu sifat dapat diakses melalui kelas yang menggunakan sifat tersebut (tetapi tidak melalui nama sifat). sifat Foo { public const KONSTAN = 1; fungsi publik bar(): int { return self::CONSTANT; // Kesalahan fatal } } class Bar { use Foo; } var_dump(Batang::KONSTANT); // 1
  • Menambahkan kemampuan untuk menentukan tipe dalam bentuk normal disjungtif (DNF, Disjunctive Normal Form), yang memungkinkan Anda menggabungkan gabungan tipe (kumpulan dua tipe atau lebih) dan perpotongan tipe (tipe yang nilainya termasuk dalam beberapa mengetik secara bersamaan). class Foo { fungsi publik bar((A&B)|null $entity) { if ($entity === null) { return null; } kembalikan $entitas; } }
  • Ekstensi baru "Acak" telah diusulkan dengan fungsi dan kelas untuk menghasilkan angka dan urutan pseudo-acak. Modul ini menyediakan antarmuka berorientasi objek, memungkinkan Anda memilih mesin yang berbeda untuk menghasilkan bilangan pseudo-acak, termasuk yang cocok untuk digunakan dalam kriptografi, dan menyediakan fungsi tambahan, misalnya, untuk mencampur array dan string secara acak, memilih kunci array acak, penggunaan beberapa generator secara bersamaan dengan status independennya sendiri. $rng = $adalah_produksi ? Acak\Engine\Aman() baru : Acak\Engine\Mt19937(1234); $randomizer = baru Acak\Randomizer($rng); $randomizer->shuffleString('foobar');
  • Mengimplementasikan konversi kasus independen-lokal. Fungsi seperti strtolower() dan strtoupper() sekarang selalu mengonversi kasus karakter dalam rentang ASCII seolah-olah lokalnya adalah "C".
  • Menambahkan fungsi baru: mysqli_execute_query, curl_upkeep, memory_reset_peak_usage, ini_parse_quantity, libxml_get_external_entity_loader, sodium_crypto_stream_xchacha20_xor_ic, openssl_cipher_key_length.
  • Menambahkan metode baru: mysqli::execute_query, ZipArchive::getStreamIndex, ZipArchive::getStreamName, ZipArchive::clearError, ReflectionFunction::isAnonymous, ReflectionMethod::hasPrototype.
  • Kemampuan untuk membuat properti secara dinamis di kelas sudah tidak digunakan lagi. Di PHP 9.0, mengakses properti yang awalnya tidak ditentukan di kelas akan menghasilkan kesalahan (ErrorException). Kelas yang menyediakan metode __get dan __set untuk membuat properti, atau properti dinamis di stdClass akan terus bekerja tanpa perubahan, hanya pekerjaan implisit dengan properti yang tidak ada yang akan didukung untuk melindungi pengembang dari bug tersembunyi. Untuk mempertahankan fungsi kode lama, atribut β€œ#[AllowDynamicProperties]” diusulkan, yang memungkinkan penggunaan properti dinamis.
  • Kemampuan untuk mengganti nilai variabel menjadi string menggunakan ekspresi "${var}" dan ${(var)}" sudah tidak digunakan lagi. Dukungan untuk penggantian "{$var}" dan "$var" yang umum digunakan telah dipertahankan. Misalnya: "Halo {$dunia}"; Oke "Halo $dunia"; Oke "Halo ${dunia}"; Tidak digunakan lagi: Menggunakan ${} dalam string tidak digunakan lagi
  • Callable yang didukung sebagian yang tidak digunakan lagi yang dapat dipanggil melalui "call_user_func($callable)", tetapi tidak mendukung pemanggilan dalam bentuk "$callable()": "self::method" "parent::method" "static::method" ["self", "method"] ["parent", "method"] ["static", "method"] ["Foo", "Bar::method"] [new Foo, "Bar:: method"]
  • Direktif error_log_mode telah ditambahkan ke pengaturan, memungkinkan Anda menentukan mode akses ke log kesalahan.

Sumber: opennet.ru

Tambah komentar