Rilis bahasa pemrograman PHP 8.3

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

Perubahan penting di PHP 8.3:

  • Selama kloning kelas, dimungkinkan untuk menginisialisasi ulang properti dengan atribut β€œreadonly”. Mengganti properti readonly hanya diperbolehkan di dalam fungsi β€œ__clone”: readonly class Post { public function __construct( public DateTime $createdAt, ) {} public function __clone() { $this->createdAt = new DateTime(); // diperbolehkan meskipun properti "createdAt" bersifat read-only. } }
  • Kemampuan untuk menggunakan konstanta dengan indikasi tipe di kelas, sifat dan enumerasi telah disediakan: class Foo { const string BAR = 'baz'; }
  • Menambahkan dukungan untuk atribut β€œ#[Override]”, yang dengannya pengembang dapat memberi tahu penerjemah bahwa metode yang ditandai menggantikan beberapa metode induk. Jika tidak ada override, interpreter akan menampilkan error.
  • Mengubah penanganan nilai negatif sebagai indeks array. Misalnya ketika menambahkan elemen dengan nomor β€œ-5” ke array kosong dan menambahkan elemen lain, sebelumnya elemen kedua disimpan dengan indeks β€œ0”, tetapi mulai versi PHP 8.3 akan disimpan dengan indeks β€œ-4” . $array = []; $array[-5] = 'sebuah'; $array[] = 'b'; var_export($array); // Tadinya array (-5 => 'a', 0 => 'b') // Menjadi array (-5 => 'a', -4 => 'b')
  • Menambahkan kemampuan untuk membuat kelas anonim dalam mode baca-saja: $class = new readonly class { public function __construct( public string $foo = 'bar', ) {} };
  • Menambahkan fungsi json_validate() untuk memeriksa dengan cepat apakah suatu string dalam format JSON tanpa melakukan operasi decoding. json_validate(string $json, int $kedalaman = 512, int $flags = 0): bool
  • Metode baru telah ditambahkan ke kelas Randomizer, yang menyediakan API tingkat tinggi untuk menghasilkan angka dan urutan pseudo-acak: getBytesFromString untuk menghasilkan string dengan ukuran tertentu, menggunakan karakter yang ada dalam string lain secara acak; getFloat dan nextFloat untuk menghasilkan angka floating point acak yang berada dalam rentang yang ditentukan.
  • Menambahkan kemampuan untuk mengambil konstanta menggunakan sintaksis kelas dinamis: class Foo { const BAR = 'bar'; } $nama = 'BAR'; // Sebelumnya, untuk mengambil konstanta BAR, Anda harus memanggil konstanta(Foo::class . '::' .$name); // Sekarang tentukan saja Foo::{$name};
  • Menambahkan pembuatan pengecualian individual (DateMalformedIntervalStringException, DateInvalidOperationException, DateRangeError) jika terjadi masalah dalam operasi yang bekerja dengan tanggal dan waktu.
  • Peningkatan penanganan kesalahan yang terjadi selama penguraian data serial dalam fungsi unserialize(). Jika terjadi masalah, unserialize() sekarang mengeluarkan E_WARNING, bukan E_NOTICE.
  • Perubahan telah dilakukan pada fungsi range(). Pengecualian dihasilkan ketika mencoba meneruskan objek, sumber daya, atau array dalam variabel yang menentukan batas rentang, serta ketika menentukan nilai negatif dalam parameter $step atau nilai yang tidak ditentukan dalam parameter apa pun. Daftar karakter sekarang dapat dihasilkan saat menentukan string, bukan angka (misalnya, β€œrange('5', 'z')").
  • Mengubah perilaku sifat dengan properti statis, yang sekarang menggantikan properti statis yang diwarisi dari kelas induk.
  • Menambahkan pengaturan untuk perlindungan stack overflow. Direktif zend.max_allowed_stack_size dan zend.reserved_stack_size telah ditambahkan ke file ini, yang menentukan ukuran tumpukan maksimum yang diperbolehkan dan dicadangkan. Program akan crash ketika mendekati kelelahan tumpukan, ketika tumpukan penuh melebihi perbedaan antara zend.max_allowed_stack_size dan zend.reserved_stack_size (eksekusi akan berhenti sebelum terjadi kesalahan segmentasi). Secara default, nilai zend.max_allowed_stack_size diatur ke 0 (0β€”ukuran ditentukan secara otomatis; untuk menonaktifkan batasan, Anda dapat mengaturnya ke -1).
  • Menambahkan fungsi POSIX baru posix_sysconf(), posix_pathconf(), posix_fpathconf() dan posix_eaccess().
  • Fungsi mb_str_pad telah ditambahkan, yang merupakan analog dari fungsi string str_pad(), yang dirancang untuk bekerja dengan pengkodean multi-byte seperti UTF-8.
  • Memungkinkan Anda membuat penutupan dari metode dan meneruskan argumen bernama ke penutupan tersebut. $tes = Tes baru(); $penutupan = $uji->sihir(…); $closure(a: 'halo', b: 'dunia');
  • Mengubah perilaku saat menangani visibilitas konstanta di antarmuka. antarmuka I { public const FOO = 'foo'; } kelas C mengimplementasikan I { private const FOO = 'foo'; }
  • Kemampuan fungsi array_sum(), array_product(), posix_getrlimit(), gc_status(), class_alias(), mysqli_poll(), array_pad() dan proc_get_status() telah diperluas.
  • Kemampuan untuk meneruskan nilai $widths negatif ke mb_strimwidth() sudah tidak digunakan lagi. Konstanta NumberFormatter::TYPE_CURRENCY telah dihapus. Dukungan untuk memanggil fungsi ldap_connect() dengan dua parameter $host dan $port telah dihentikan. Pengaturan opcache.consistency_checks telah dihapus.

Sumber: opennet.ru

Tambah komentar