Anda di halaman 1dari 4

Pseudo-variable $this

Kali ini kita akan membahas sebuah konsep yang sering membuat bingung, yakni
tentang pseudo-variable $this. Sebelum ke sana, silahkan pelajari sebentar kode program
berikut ini:

Kita mengubah kembali struktur class Produk. Sekarang class Produk memiliki
property jenis dan merek, kemudian terdapat method pesanProdukTelevisi() dan
pesanProdukMesinCuci(). Kedua method ini mengembalikan nilai string "Televisi dipesan..."
atau "Mesin cuci dipesan...".
Setelah itu kita membuat 2 buah object dengan nama $produk01 dan $produk02, serta
mengisi property jenis dan merek ke dalam masing-masing object (baris 15 – 21).
Selanjutnya kita memesan $produk01 dengan cara memanggil method $produk01-
>pesanProdukTelevisi() di baris 23, serta memesan $produk01 dengan menjalankan method
$produk02->pesanProdukMesinCuci() di baris 24.
Sekilas tidak ada yang salah dari kode di atas, tapi class Produk menjadi kurang fleksibel.
Bagaimana jika kita ingin membuat $object03 dengan jenis speaker dan ingin memesan
speaker ini? Maka kita harus modifikasi ulang class Produk untuk menambahkan method
pesanProdukSpeaker(). Dan bagaimana jika nanti ada 100 produk? Kita terpaksa menulis satu
per satu method untuk setiap Produk.
Ada cara yang lebih baik, dari pada membuat 1 method untuk setiap tipe produk, kita
bisa rancang method "generik" bernama pesanProduk() dengan konsep sebagai berikut:
Perhatikan isi dari method pesanProduk() di baris 7. Kita bermaksud menyambung isi
property $jenis milik class Produk, dengan string " dipesan".
Nantinya, property $jenis ini akan berisi string "Televisi" di baris 12, sehingga kita
mengharapkan hasil pemanggilan method $produk01->pesanProduk() di baris 15 akan menjadi
"Televisi dipesan...".
Namun ketika dijalankan hasilnya adalah sebagai berikut:
Notice: Undefined variable: jenis in on line 7
Pesan error ini mengatakan bahwa PHP tidak menemukan variabel $jenis di baris 7.
Loh, bukannya di baris 3 kita sudah mendefinisikan property $jenis? yang kemudian
diisi kembali di baris 12? kenapa PHP tidak bisa membacanya?
Untuk bisa memahami apa yang terjadi, kita harus kembali kepada definisi dari object,
yakni implementasi konkret sebuah class. Selama pemrosesan kode PHP, yang seharusnya kita
akses adalah object, bukan class. Class adalah tempat untuk pembuatan definisi saja (sebagai
blueprint).
Ketika kita menulis perintah return $jenis." dipesan..." di dalam method pesanProduk(),
artinya kita sedang mencoba mengakses property milik class, padahal seharusnya yang diakses
itu adalah property milik object.
Di sinilah kita butuh sebuah variabel bantu sebagai penanda bahwa yang ingin diakses
adalah property milik object, bukan milik class. Variabel bantu tersebut adalah $this.
Agar method pesanProduk() bisa diproses sebagaimana mestinya, kita harus tulis ulang
menjadi: return $this->jenis." dipesan...". Berikut perubahan dari kode program sebelumnya:
Sekarang, pada saat method $produk01->pesanProduk() dijalankan, hasilnya adalah
"Televisi dipesan..." Lebih jauh lagi, kita bisa modifikasi sebagai berikut:

Kita tidak lagi memberikan nilai awal untuk property $jenis dan $merek di baris 3 – 4.
Ini tidak masalah karena nilainya nanti akan diisi setelah object dibuat.
Method pesanProduk() juga sedikit berubah, sekarang kita memadukan nilai dari $this-
>jenis, dengan $this->merek. Tanda titik di antara penulisan tersebut adalah operator
penyambungan string (string concatenation).
Di baris 11 – 17 kita membuat dua buah object, yakni $produk01 dan $produk02,
kemudian mengisi property $jenis dan $merek untuk masing-masing object.
Di baris 19 terdapat pemanggilan method pesanProduk() dari object $produk01. Karena
property $jenis sudah diisi string "Televisi" dan property $merek diisi string "Samsung", maka
inilah yang menjadi nilai dari $this->jenis dan $this->merek.
Di baris 20 juga terdapat pemanggilan method pesanProduk(), tapi kali ini dari object
$produk02. Sekarang, nilai dari $this->jenis dan $this->merek akan menyesuaikan diri dengan
object $produk02 yang sebelumnya di set sebagai "Mesin cuci" dan "LG". Inilah maksud
bahwa variabel $this, merujuk ke object, bukan class.
Konsep tentang pseudo-variable $this ini memang cukup membingungkan namun
sangat penting. Kembali, perlu dipahami bahwa $this adalah sebuah variabel khusus yang
merujuk kepada object pada saat kita menulis sesuatu di dalam class.

Anda mungkin juga menyukai