PHP 8.2, yang dirilis pada akhir tahun 2022, melanjutkan tren peningkatan performa dan penyempurnaan sintaks yang dimulai dengan PHP 8.0 dan 8.1. Rilis ini memperkenalkan beberapa fitur menarik yang berfokus pada kejelasan kode, keamanan, dan kemampuan typing, sambil secara bertahap menghapus fitur lama (depresiasi) untuk mempersiapkan rilis di masa mendatang.
✨ Fitur Baru yang Paling Menonjol
PHP 8.2 hadir dengan sejumlah fitur baru yang sangat berguna bagi pengembang untuk menulis kode yang lebih ringkas, aman, dan mudah di-maintain.
1. Readonly Classes
Ini adalah salah satu fitur paling signifikan. Sebelumnya, Anda bisa mendeklarasikan properti individual sebagai readonly, tetapi Anda masih harus mengulanginya untuk setiap properti. PHP 8.2 memperkenalkan kata kunci readonly class yang secara otomatis membuat semua properti di dalamnya menjadi readonly.
Manfaat: Memungkinkan pembuatan value object (objek yang nilainya tidak dapat diubah setelah konstruksi) dengan lebih ringkas, meningkatkan keandalan data.
Sebelum PHP 8.2, untuk membuat kelas yang propertinya tidak dapat diubah, Anda harus mendeklarasikan kata kunci readonly pada setiap properti satu per satu.
Kebutuhan: Setiap properti harus dideklarasikan
readonlysecara individual.Kode:
class UserData {
public readonly string $name;
public readonly int $age;
public function __construct(string $name, int $age) {
$this->name = $name;
$this->age = $age;
}
}
PHP 8.2 memperkenalkan kata kunci readonly class. Dengan mendeklarasikan kelas sebagai readonly, semua properti di dalamnya secara otomatis akan menjadi readonly.
Kebutuhan: Cukup tambahkan kata kunci
readonlydi depanclass.Manfaat: Kode menjadi lebih ringkas dan meminimalisir risiko lupa menambahkan
readonlypada properti baru.Kode:
readonly class UserData {
public string $name;
public int $age;
public function __construct(string $name, int $age) {
$this->name = $name;
$this->age = $age;
}
}
Dengan fitur baru ini, Anda mendapatkan manfaat keamanan yang sama, yaitu memastikan data objek tidak dimodifikasi di luar konstruktor, tetapi dengan sintaks yang jauh lebih bersih.
2. Disjunctive Normal Form (DNF) Types
DNF adalah konsep logika yang memungkinkan Anda mendefinisikan tipe dengan kombinasi *Union* (`|`) dan *Intersection* (`&`) secara terstruktur.
* **Aturan DNF:** Anda dapat mengombinasikan tipe dengan menggunakan *Union* (`|`) pada tipe yang merupakan *Intersection* (`&`). Dalam praktiknya, ini memungkinkan Anda mendeklarasikan tipe data yang lebih kompleks dan presisi.
**Contoh:**
“`php
public function process((A&B)|(C&D)|null $entity): void {
// Parameter $entity harus berupa objek yang mengimplementasikan A DAN B,
// ATAU objek yang mengimplementasikan C DAN D, ATAU null.
}
3. Konstanta pada Trait
Sebelumnya, trait tidak diizinkan memiliki konstanta. PHP 8.2 memungkinkan deklarasi konstanta di dalam trait.
Manfaat: Memungkinkan trait untuk mendefinisikan nilai yang melekat pada implementasinya, membuat kode lebih terstruktur.
4. Tipe null, true, dan false sebagai Tipe Mandiri
Meskipun null sudah dapat digunakan dalam Union Type (misalnya string|null), PHP 8.2 sekarang memungkinkan null, true, dan false digunakan sebagai tipe kembalian (return type) yang berdiri sendiri.
Contoh:
PHPfunction alwaysTrue(): true { return true; } function alwaysNull(): null { return null; }
5. Atribut Baru: #[SensitiveParameter]
Atribut baru ini meningkatkan keamanan dan kemampuan debugging.
Tujuan: Untuk menandai parameter sensitif (seperti password atau kunci API) dalam suatu fungsi atau metode.
Manfaat: Ketika terjadi stack trace (pelacakan error), nilai dari parameter yang ditandai akan disensor/disembunyikan oleh PHP, mencegah informasi sensitif terekspos dalam log atau error report.
🗑️ Depresiasi (Deprecations) Utama
Setiap rilis besar PHP juga menghapus atau mendepresiasi fitur-fitur yang dianggap usang, tidak aman, atau kurang optimal. Ini adalah peringatan bagi pengembang untuk memperbarui kode mereka.
1. Depresiasi Properti Dinamis (Dynamic Properties)
Ini adalah perubahan yang paling penting dalam 8.2. Properti dinamis adalah properti yang dideklarasikan saat runtime tanpa didefinisikan dalam definisi kelas.
Masalah: Properti dinamis sering kali menjadi sumber bug yang sulit dideteksi karena typo tidak akan menghasilkan error.
Aksi: Penggunaan properti dinamis akan mengeluarkan peringatan
Deprecation Notice.Pengecualian: Kelas bawaan
\stdClasstetap diizinkan menggunakan properti dinamis.
Cara Memperbaiki:
Deklarasikan properti secara eksplisit di dalam kelas.
Gunakan atribut
#[AllowDynamicProperties]pada kelas jika Anda benar-benar harus mempertahankan properti dinamis (ini hanya untuk kompatibilitas ke belakang atau kasus khusus).
2. Depresiasi "${var}" Interpolasi String
Sintaks lama untuk string interpolation (penyisipan variabel di dalam string) menggunakan "${var}" sekarang dianggap usang demi sintaks yang lebih disukai dan konsisten: "$var" atau "{$var}".
Contoh Deprecated:
"Hello ${name}"Contoh yang Disarankan:
"Hello $name"atau"Hello {$name}"
🛠️ Perbaikan dan Peningkatan Internal
Selain fitur sintaksis, PHP 8.2 juga mencakup berbagai perbaikan internal dan peningkatan yang berkontribusi pada stabilitas dan performa.
Performa: Meskipun tidak se-agresif lompatan performa dari 7.x ke 8.0 (berkat JIT), PHP 8.2 tetap menawarkan peningkatan performa kecil melalui optimasi pada berbagai bagian mesin inti.
Peningkatan di Fungsi
mysqli: PHP 8.2 memperkenalkan fungsi barumysqli_execute_querydan metodemysqli::execute_query. Metode ini adalah gabungan darimysqli_preparedanmysqli_execute, yang memungkinkan eksekusi prepared statement dalam satu panggilan fungsi, menyederhanakan kode dan meningkatkan keamanan terhadap serangan SQL injection.
🎯 Kesimpulan
PHP 8.2 adalah langkah evolusioner penting, bukan revolusioner seperti 8.0. Fokus utamanya adalah pada menegakkan typing (Readonly Classes, DNF Types) dan membersihkan dasar-dasar bahasa (Depresiasi Properti Dinamis) untuk membuat PHP menjadi bahasa yang lebih andal, modern, dan aman. Meng-upgrade ke PHP 8.2 sangat dianjurkan untuk memanfaatkan performa yang lebih baik dan fitur-fitur yang mendorong praktik pengembangan kode yang lebih bersih dan bug-free.


