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