Bag. 5 : Pengertian dan Fungsi Variabel $this dalam Pemrograman Objek
Pengertian dan Fungsi Variabel $this dalam OOP
Variabel $this adalah sebuah variabel khusus dalam OOP PHP yang
digunakan sebagai penunjuk kepada objek, ketika kita mengaksesnya dari dalam
class. Dalam manual PHP, $this disebut dengan istilah: pseudo-variable. Untuk lebih memudahkan pemahaman, kita akan
bahas menggunakan contoh. Berikut adalah
class laptop dengan beberapa property dan method.
<?php
//
buat class laptop
class
laptop {
// buat property untuk class laptop
public $pemilik;
public $merk;
public $ukuran_layar;
// buat method untuk class laptop
public function hidupkan_laptop() {
return "Hidupkan Laptop";
}
public function matikan_laptop() {
return "Matikan Laptop";
}
}
//
buat objek dari class laptop (instansiasi)
$laptop_anto
= new laptop();
$laptop_andi
= new laptop();
?>
Dalam kode di atas, saya membuat class laptop dengan 3 property,
yakni: $pemilik, $merk dan $ukuran_layar. Ketiga property ini belum memiliki
nilai. Di dalam class laptop juga terdapat 2 buah method, yakni
hidupkan_laptop() dan matikan_laptop(), kedua method ini akan mengembalikan
nilai string. Seluruh property dan method dari class laptop memiliki hak akses
public, sehingga bisa diakses dari luar class.
Setelah membuat class, saya kemudian men-instansiasi-nya ke dalam
2 buah objek $laptop_anto dan $laptop_andi.
Jika anda menjalankan kode program di atas, di dalam web browser
belum tampil apa-apa, karena saya belum memanggil method atau property apapun
dari kedua objek.
Selanjutnya, saya ingin menambahkan isi property $pemilik kepada
kedua objek, berikut adalah kode yang diperlukan:
$laptop_anto->pemilik
= "Anto";
$laptop_andi->pemilik
= "Andi";
Dengan perintah di atas, property $pemilik pada masing-masing
objek telah berisi nilai. Untuk menampilkan nilai dari objek tersebut, kita
tinggal mengaksesnya dengan kode berikut:
echo
$laptop_anto->pemilik; // "Anto"
Sampai di sini, kita telah memahami cara mengakses property objek
dari objek itu sendiri, yakni dengan menggunakan format:
$nama_objek->nama_property
Bagaimana jika property tersebut telah di-set nilainya dari dalam
class? Berikut adalah perubahan class laptop:
<?php
//
buat class laptop
class
laptop {
// buat property untuk class laptop
public $pemilik="Andi";
// buat method untuk class laptop
public function hidupkan_laptop() {
return "Hidupkan Laptop";
}
}
//
buat objek dari class laptop (instansiasi)
$laptop_baru
= new laptop();
$laptop_lama
= new laptop();
?>
Class laptop di atas saya revisi sehingga hanya memiliki 1
property dan 1 method. Perhatikan bahwa property $pemilik telah diisi pada
level class, sehingga pada saat pembuatan objek (instansiasi), seluruh objek akan
memiliki nilai ini.
Objek $laptop_baru dan $laptop_lama sama-sama berasal dari class
laptop, dan nilai property $pemilik sama- sama berisi “Andi”.
echo
$laptop_baru->pemilik; // Andi
echo
$laptop_lama->pemilik; // Andi
Lebih jauh lagi, pemanggilan method juga akan menghasilkan nilai
yang sama:
echo
$laptop_baru->hidupkan_laptop(); // "Hidupkan Laptop"
echo
$laptop_lama->hidupkan_laptop(); // "Hidupkan Laptop"
Kita akan masuk ke dalam bagian terpenting. Bagaimana jika saya
ingin ketika method hidupkan_laptop() dipanggil, yang akan ditampilkan adalah :
“Hidupkan Laptop Andi“?
Apabila anda telah mempelajari dasar-dasar PHP, tentunya cara
paling jelas adalah dengan mengubah return string di dalam method
hidupkan_laptop() sebagai berikut:
public
function hidupkan_laptop() {
return "Hidupkan Laptop Andi";
}
Cara tersebut tidak salah, dan akan menghasilkan nilai “Hidupkan
Laptop Andi” pada saat pemanggilan method hidupkan_laptop(). Tetapi, bukankah
kita telah memiliki property $pemilik dengan nilai “Andi”? kita bisa
menggunakan property ini dan menambahkannya ke dalam method hidupkan_laptop. Untuk mencoba ide tersebut, silahkan ubah
contoh class laptop sebelumnya menjadi berikut:
<?php
//
buat class laptop
class
laptop {
// buat property untuk class laptop
public $pemilik="Andi";
public $merk;
// buat method untuk class laptop
public function hidupkan_laptop() {
return "Hidupkan Laptop
$pemilik";
}
}
//
buat objek dari class laptop (instansiasi)
$laptop_baru
= new laptop();
echo
$laptop_baru->hidupkan_laptop(); // "Hidupkan Laptop"
?>
Jika anda menjalankan kode di atas, hasil yang didapat adalah:
Notice:
Undefined variable: pemilik in
D:\xampp\htdocs\oop_php\belajar_objek.php
on line 11 Hidupkan Laptop
Dari penjelasan error PHP, dinyatakan bahwa “variabel pemilik
tidak terdefinisi pada baris 11”. Baris tersebut adalah baris dimana kita
menampilkan “Hidupkan Laptop $pemilik” dengan method hidupkan_laptop().
Apa yang terjadi? Bukankah $pemilik=”Andi” telah terdefinisi pada
property class?
Inilah yang dimaksud dalam awal tutorial kali ini, kita sedang
mencoba mengakses property objek dari dalam class. Jika anda bingung dengan
pengertian ini, anda tidak sendiri. Saya juga kesulitan dalam memahami konsep
ini pada pertama kali belajar OOP.
Untuk memahaminya, kita harus ingat bahwa class hanyalah sebuah
“blue print” atau kerangka. Seluruh property dan method nantinya akan diakses
dari dalam objek, bukan dari dalam class. Pada saat proses instansiasi class,
seluruh property dan method akan “dicopy” ke dalam objek.
Perintah: $laptop_baru = new laptop() akan membuat objek
$laptop_baru memiliki property $pemilik dan method hidupkan_laptop() (sesuai
dengan kerangka dari class laptop). Seluruh perintah lanjutan yang kita lakukan
berada di dalam objek $laptop_baru, bukan di dalam class laptop.
Ketika kita menjalankan method hidupkan_laptop(), objek
$laptop_baru akan menemui baris perintah:
“Hidupkan Laptop $pemilik”
variabel $pemilik di sini tidak terdefinisi karena $pemilik berada
di dalam konteks class, bukan objek.
Untuk mengatasi masalah ini, kita harus mengubah definisi method
hidupkan_laptop() menjadi:
"Hidupkan
Laptop $this->pemilik";
Variabel $this merujuk kepada objek yang sedang menginstansiasi
class.
Jika di dalam class laptop kita membuat:
"Hidupkan
Laptop $this->pemilik";
Maka di dalam objek $laptop_baru, akan menjadi:
"Hidupkan
Laptop $laptop_baru->pemilik";
Jika kita memiliki objek lain misalkan $laptop_lama, maka perintah
tersebut akan dijalankan menjadi:
"Hidupkan
Laptop $laptop_lama->pemilik";
Perhatikan bahwa pada level objek, variabel $this ‘dijalankan’
menjadi objek saat ini.
Untuk menguji pemahaman kita, silahkan pelajari kode berikut ini:
<?php
//
buat class laptop
class
laptop {
// buat property untuk class laptop
public $pemilik="Andi";
// buat method untuk class laptop
public function hidupkan_laptop() {
return "Hidupkan Laptop
$this->pemilik";
}
}
//
buat objek dari class laptop (instansiasi)
$laptop_baru
= new laptop();
echo
$laptop_baru->hidupkan_laptop(); // "Hidupkan Laptop Andi";
//ubah
isi property $pemilik pada objek $laptop_baru
$laptop_baru->pemilik="Arie";
echo
$laptop_baru->hidupkan_laptop(); // "Hidupkan Laptop Arie";
//
buat objek baru dari class laptop dan panggil hidupkan_laptop()
$laptop_lama
= new laptop();
echo
$laptop_lama->hidupkan_laptop();
?>
Tanpa menjalani kode program tersebut, silahkan tebak apa hasil
yang akan ditampilkan dari perintah: echo $laptop_lama->hidupkan_laptop()
yang berada pada baris terakhir, dan kenapa hasilnya bukan “Hidupkan Laptop
Arie” ?

Post a Comment