Tutorial OOP Lanjutan

stdClass dan Dynamic Property

Materi ini memiliki 1 buah lampiran. Namun Anda tidak dapat mengakses lampiran karena belum terdaftar di kursus ini. Klik disini untuk mendaftar.

stdClass adalah kelas generik bawaan PHP. Artinya kita bisa langsung menggunakan kelas tersebut tanpa perlu membuat deklarasi kelas. Biasanya stdClass digunakan untuk melakukan konversi dari tipe data lain menjadi tipe data object. Sebagai contoh, kita ingin mengubah tipe data Array menjadi Object.

Berikut adalah contoh kode stdClass. Misalkan kita membuat variable dengan nama $array yang diisi dengan associative array. Kemudian kita ingin mengubah tipe datanya menjadi object dan disimpan ke variable dengan nama $obj. Untuk mengubah tipe data, kita bisa menggunakan tanda kurung yang didalamnya kita tuliskan jenis tipe data tujuannya, yaitu object.

Kalau kita coba var_dump hasilnya, maka kita mendapatkan object yang dibuat dari kelas stdClass. Perhatikan bahwa index pada associative array akan menjadi nama property-nya.

Agar lebih jelas kita langsung coba praktek. Disini ada file baru dengan nama stdclass.php. Di dalamnya kita buka tag php. Lalu kita buat variable $array seperti slide barusan. Kita isi dengan index ‘name’ value ‘Budi’, kemudian index ‘age’ dan value 18.

Selanjutnya kita buat variable $obj untuk menampung hasil casting $array menjadi object. Kita var_dump variable $obj untuk melihat hasilnya. Kita simpan dan jalankan. Maka kita mendapatkan hasil sebuah object yang dibuat menggunakan stdClass. Dan perhatikan isi dari object. Yang tadinya pasangan index value di dalam array, telah berubah menjadi pasangan property value di dalam object.

Kalau misalkan kita ingin mengakses nilai dari property name, kita tinggal gunakan variable $obj ditambah tanda panah dan nama property name. Maka kita bisa mengakses nilai “Budi”.

Tipe data object ini bisa kita kembalikan menjadi array. Sebagai contoh, kita buat variable $newArray. Yang isinya adalah, kita casting varible $obj menjadi sebuah array. Lalu kita var_dump nilai dari $newArray. Sebagai hasilnya kita mendapatkan kembali associative array seperti awal. Pasangan property value pada object berubah menjadi pasangan index value pada array.

Agar bisa dibandingkan dengan kelas biasa, kita buat kelas baru dengan nama Person. Agar kodenya singkat, kita buat constructor dengan menggunakan fitur promotion, dengan parameter public string $name dan public int $age. Artinya parameter ini akan diangkat menjadi property ya. Selanjutnya kita instantiate object $person dengan argument ‘Budi’ dan 18. Kita var_dump nilai dari variable $obj dan $person untuk membandingkan hasilnya.

Kita simpan dan jalankan. Kita bisa lihat setelah tipe data object, PHP menyebutkan nama kelasnya. Nama kelas pertama adalah stdClass, sedangkan nama kelas kedua adalah Person.

Apakah object dari kelas Person bisa kita ubah menjadi array juga? Jawabannya adalah bisa. Sebagai contoh, kita pindahkan kode $newArray ke bawah person. Lalu kita coba melakukan casting ke tipe data array namun menggunakan variable $person. Hasilnya tetap sama ya. Kita mendapatkan associative array yang dibangun dari pasangan property value milik object.

Kita sudah mencoba menggunakan stdClass. Kelas ini memiliki kelebihan dan kekurangan ya. Kelebihan yang pertamanya adalah mudah untuk digunakan, karena kita tidak perlu membuat deklarasi kelas. Kita bisa langsung menggunakannya. Namun disamping menjadi kelebihan, ternyata hal yang sama juga menyebabkan kekurangan. Berhubung tidak ada deklarasi kelas, maka kita menjadi kesulitan untuk mengetahui property apa saja yang ada di dalam kelas. Dan kita juga tidak bisa mendeklarasikan method untuk digunakan di dalam kelas.

Kelebihan kedua dari stdClass adalah kita bisa menambahkan property secara dinamis. Artinya property yang awalnya tidak ada di dalam object, bisa kita tambahkan pada saat script berjalan. Namun kita mesti berhati-hati dalam menggunakan fitur dynamic property ini, karena fitur ini rawan terhadap bugs yang disebabkan karena typo.

Kita akan praktekkan bagaimana cara menggunakan fitur dynamic property. Misalkan pada variable $obj. Pada saat kita membuat object-nya dari array, kita hanya memiliki 2 buah property yaitu name dan age. Setelah itu kita masih bisa menambahkan property baru. Misalkan kita ingin menambahkan property height. Caranya? Kita sebutkan saja nama variable $obj diikuti oleh tanda panah dan nama property height, lalu kita isi dengan nilai misalkan 170. Maka PHP membuatkan property baru height.

Walaupun fitur ini bisa kita gunakan untuk menambahkan property baru secara dinamis, namun kita mesti berhati-hati karena fitur ini rawan terhadap typo. Sebagai contoh kita hendak mengubah property name menjadi ‘Andi’. Namun pada saat kita menuliskan nama property-nya, kita salah ketik name menjadi nama. Maka sebagai hasilnya, kita bukannya mengubah property name, melainkan menambahkan property baru nama. Kita mesti berhati-hati karena bugs typo seperti ini lebih sulit untuk dideteksi.

Fitur dynamic property hanya bisa digunakan pada kelas stdClass, atau kelas yang diturunkan dari stdClass. Jangan digunakan pada kelas biasa. Sebagai contoh disini kita memiliki kelas Person. Kita coba tambahkan juga property height pada object $person. Disini kode masih berjalan normal ya. Tidak ada pesan error dan property height juga tetap ditambahkan pada object.

Sebenarnya disini kita sudah terkena pesan error deprecated. Namun secara default pesan tersebut tidak ditampilkan di layar. Kalau kita hendak menampilkan pesan error-nya, maka kita harus tambahkan kode berikut di bagian paling atas kode kita.

error_reporting(E_ALL);

Sekarang kalau kita jalankan, maka kita mendapatkan pesan error deprecated bahwa pembuatan dynamic property height pada kelas person sudah merupakan fitur yang deprecated. Artinya fitur ini seharusnya sudah tidak digunakan. Untuk PHP versi 8,2, dynamic property hanya mengeluarkan pesan error deprecated namun kode masih tetap berjalan normal. Namun pada dokumentasi PHP menyebutkan bahwa pada versi kedepannya, dynamic property akan menyebabkan fatal error. Oleh karena itu kita disarankan untuk tidak menggunakan fitur ini untuk kelas yang bukan merupakan stdClass atau turunannya.

2 Jam 41 Menit

Dengan menggunakan fasilitas tanya jawab, maka Anda bisa bertanya dan akan dijawab langsung oleh instruktur kursus.

Anda belum terdaftar pada kursus ini sehingga tidak bisa mengajukan pertanyaan.