Mengakali Dynamic Binding Yii di PHP 5.2.x
July 30th, 2011, Written by: | Categories: Programming, Tutorial

Yii Framework

Yii Framework yang cepat, aman dan profesional

Berbicara masalah reusability coding, maka semua pasti sepakat adanya fungsi dynamic binding, hidup menjadi lebih mudah. Sekilas dynamic binding yang dimaksud penulis seperti ini:

$namaKelas = 'Mahasiswa';
$objBaru = new $namaKelas;
$objBaru->listData();

Coding dummy di atas menunjukkan kita membuat objek kelas Mahasiswa. Yang spesial adalah alih-alih menggunakan

$objBaru = new Mahasiswa;

penulis menggunakan

$objBaru = new $namaKelas;

Itu artinya tipe kelas bagi $objBaru tidak akan diketahui sampai coding itu dijalankan. Dikarenakan $objBaru diikat(di-bind) pada saat program berjalan, dynamic binding dikenal juga dengan sebutan late binding.

Kali ini penulis akan memaparkan kekuatan Yii sehubungan dengan dyanmic binding. Terkadang dynamic binding bisa membantu menyederhanakan coding kita. Misalnya, kita memiliki model User dan model Admin. Ketika seseorang sedang login, dia mungkin seorang user atau mungkin seorang admin.

Jika tanpa dynamic binding kita mungkin harus menggunakan coding ini:

$jenisUser = Yii::app()->user->jenis_user;//dalam contoh ini dia return 'User' atau 'Admin'
if($jenisUser=='User'){
$obj = new User;
}else if($jenisUser=='Admin'){
$obj = new Admin;
}
$hasil = $obj->findAll();

Tetapi kalau memiliki dynamic binding maka kita bisa menggunakan code ini:

$jenisUser = Yii::app()->user->jenis_user;
$obj = new $jenisUser;
$hasil = $obj->findAll();

Lihatlah, dengan dynamic binding kita tidak perlu menggunakan if untuk menentukan kelas. Keuntungan lainnya, jika kelak muncul jenis user yang baru, kita tidak perlu menambah if.

Hanya saja, dynamic binding baru didukung pada versi PHP 5.3. Sebagian besar hosting(terutama di Indonesia) masih menggunakan versi PHP 5.2.x. Oleh karena itu, dynamic binding tidak bisa digunakan. Tetapi sebetulnya itu bukan berarti akhir segalanya, karena dengan Yii kita bisa mengakalinya. Yii mampu mensimulasikan dynamic binding pada class ActiveRecord-nya. Untuk lebih jelas, lihat coding berikut untuk menyelesaikan permasalahan di atas.

$jenisUser = Yii::app()->user->jenis_user;
$hasil = ActiveRecord::model($jenisUser)->findAll();

Perhatikan bagaimana biasanya kita menggunakan NamaModel::model() untuk mengakses fungsi ActiveRecord, ternyata bisa menggunakan cara lain. Yaitu memanggil kelas ActiveRecord sendiri dan memberikan parameter pada fungsi model(). Inilah salah satu kekuatan Yii 1.1.x yang memanfaatkan semua fitur di PHP 5.2.x. Sebuah fungsi yang sangat berguna dan membuat hidup programmer tetap mudah walau tidak ada dynamic binding.

Leave a Reply