Dynamic Properties deprecated di PHP 8.2? Mimpi buruk?
Di PHP versi 8.2 terdapat update yang dianggap para developer php seperti gw kaget, yap dynamic property menjadi deprecated by default, Lho kok bisa?
Update
Seperti biasa setelah melakukan upgrade minor dari php 8.0 ke 8.1, php group kembali memberikan rilis informasi bahwa mereka sedang mengerjakan update php 8.2 yang nantinya akan memberikan update antara lain sebagai berikut (yang aku notice terbesar ya)
- Class
readonly
- Union type baru
true
danfalse
- Dukungan redaksi nilai Parameter Sensitif
- Extensi
Random
baru - MySQLi: New
mysqli_execute_query
function andmysqli::execute_query method
- Fungsi
openssl_cipher_key_length
yang diperbarui - Pengaturan permission untuk
error_log_mode
- OpenSSL: Fungsi baru
openssl_cipher_key_length
- Dukungan
const
untuk trait - Dynamic Property Deprecations
- etc. Selengkapnya bisa dibaca di sini
Big Notes
Namun dari perubahan diatas, ada perubahan yang paling menonjol menurut gw berdasarkan pengalaman gw dalam develop sebuah software (backend) menggunakan php, yaitu Dynamic Property yang menjadi deprecated di versi baru ini, asumsinya kita tidak bisa lagi declare sebuah variabel yang berisi class
lalu write property langsung, kaya dibawah ini deh
$var = new Member();
$var->name = "Yanuar";
Kalau masih maksa buat pake dynamic prop di php 8.2 bakal munculin output kaya dibawah ini, by default loh ya!
Deprecated: Creation of dynamic property Member::$name is deprecated in ... on line ...
Hal di atas berlaku juga untuk constructor milik class itu sendiri loh ya, kaya gini
class Member {
public function __construct() {
$this->name = 'test';
}
}
new Member();
Deprecated: Creation of dynamic property Member::$name is deprecated in ... on line ...
Solutions
Ngeri kan? Bayangin seorang devOps atau kamu ngga sengaja upgrade pake package manager dari php 8.1 ke 8.2, apa ngga ambruk struktur kodinganmu tuh hahaha. Tapi tunggu sebentar, ada sesuatu yang mungkin bisa buat kamu agak bernafas lebih panjang, yaitu #[AllowDynamicProperties]
yap allow dynamic properties, mungkin php core engineer ngga bakal semudah itu buat hilangin dynamic property dari semua sisi karena yaa udah mendarah daging ke developer PHP di dunia? mungkin? Cara aplikasinya simpel kok, tinggal declare / write line tersebut diatas pembuatan class kaya dibawah deh
#[AllowDynamicProperties]
class Member {
public function __construct() {
$this->name = 'test';
}
}
new Member();
Voila, bisa kaan? Ada cara lain sebetulnya yaitu menggunakan sesuatu yang belum mungkin deprecated yaitu stdClass
, gimana caranya? Extend aja classnya pake stdClass, that's it. Buat artikel lebih lengkap bisa cek disini nih. Soo ya, makin kesini php makin banyak perubahan, hopefully bakal bersaing bahasa program lain yang lebih muda dan baru. Sekian dulu post gue kali ini, thanks ☕️