Belajar Pemrograman OOP PHP Part 5 - Pengertian Dan Penggunaan Variabel $this Dalam Pemrograman Dasar PHP - CRUDPRO

Belajar Pemrograman OOP PHP Part 5 - Pengertian Dan Penggunaan Variabel $this Dalam Pemrograman Dasar PHP

Belajar Pemrograman OOP PHP Part 5 - Pengertian Dan Penggunaan Variabel $this Dalam Pemrograman Dasar PHP

Sesudah dalam panduan OOP PHP sebelumnya kita pelajari mengenai Pengertian Enkapsulasi Object (Public, Protected dan Private), dalam panduan ini kali kita akan mengulas Pemahaman dan Peranan Faktor $this dalam Objek Oriented Programming PHP.


Variabel $this ialah sebuah variabel khusus dalam OOP PHP yang dipakai sebagai petunjuk ke object, saat kita mengaksesnya dari dalam class. Dalam manual PHP, $this disebutkan dengan istilah: pseudo-variable.

Konsep variabel $this kemungkinan sedikit sulit dimengerti, terlebih bila anda tidak pernah memakai Pemrograman berbasiskan object awalnya. Jika keterangan dalam panduan ini membuat kebingungan, silakan dipelajari secara perlahan-lahan dari sejak awalnya.

Agar semakin mempermudah pengetahuan, kita akan ulas menggunakan contoh.

Berikut class laptop dengan beberapa properti dan metode.

<?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 code di atas, saya membuat class laptop dengan 3 properti, yaitu: $pemilik, $merk dan $ukuran_layar. Ketiga properti ini belum mempunyai nilai. Dalam class laptop ada 2 buah metode, yaitu hidupkan_laptop() dan matikan_laptop(), kedua metode ini akan kembalikan nilai string. Semua properti dan metode dari class laptop mempunyai hak akses public, hingga dapat diakses dari luar class.

Sesudah membuat class, saya selanjutnya men-instansiasi-nya ke dalam 2 buah object $laptop_anto dan $laptop_andi.

Bila anda menjalankan code program di atas, dalam situs browser belum tampil apapun, karena saya belum memanggil metode atau properti apa saja dari kedua object.

Seterusnya, saya ingin menambah isi properti $pemilik ke kedua object, berikut code yang dibutuhkan:

$laptop_anto->pemilik = "Anto";
$laptop_andi->pemilik = "Andi";

Dengan perintah di atas, properti $pemilik pada masing-masing object sudah berisi nilai. Untuk tampilkan nilai dari object itu, kita tinggal mengaksesnya dengan code berikut ini:

echo $laptop_anto->pemilik; // "Anto"

Sampai di sini, kita sudah pahami langkah mengakses properti object dari object tersebut, yaitu dengan memakai format:

$nama_objek->nama_property

Bagaimana bila properti itu sudah di-set nilainya dari dalam class? Berikut 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 koreksi sehingga cuma mempunyai 1 properti dan 1 metode. Lihat jika properti $pemilik sudah diisi pada tingkat class, hingga di saat pembuatan object (instansiasi), semua object akan mempunyai nilai ini.

Object $laptop_baru dan $laptop_lama sama datang dari class laptop, dan nilai properti $pemilik sama- sama berisi "Andi".

echo $laptop_baru->pemilik; // Andi
echo $laptop_lama->pemilik; // Andi

Lebih jauh lagi, pemanggilan metode akan hasilkan nilai yang serupa:

echo $laptop_baru->hidupkan_laptop(); // "Hidupkan Laptop"
echo $laptop_lama->hidupkan_laptop

Kita akan masuk ke bagian paling penting. Bagaimana bila saya ingin saat metode hidupkan_laptop() diundang, yang hendak diperlihatkan ialah : "Hidupkan Laptop Andi"?

Jika anda sudah pelajari beberapa dasar PHP, tentu saja langkah paling jelas dengan mengganti return string dalam metode hidupkan_laptop() seperti berikut:

public function hidupkan_laptop() {
     return "Hidupkan Laptop Andi";
}

Cara itu tidak salah, dan akan hasilkan nilai "Hidupkan Laptop Andi" di saat pemanggilan metode hidupkan_laptop(). Tapi, tidakkah kita sudah mempunyai properti $pemilik dengan nilai "Andi"? kita dapat memakai properti ini dan menambahnya ke metode hidupkan_laptop.

Untuk mencoba ide itu, silakan ganti contoh class laptop awalnya jadi berikut ini:

<?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 akan diperoleh adalah:

Notice: Undefined variable: pemilik in 
D:\xampp\htdocs\oop_php\belajar_objek.php on line 11 Hidupkan Laptop

Dari keterangan error PHP, dipastikan jika "variabel pemilik tidak terdefinisi pada baris 11". Baris itu ialah baris di mana kita tampilkan "Hidupkan Laptop $pemilik" dengan metode hidupkan_laptop().

Apa yang terjadi? Tidakkah $pemilik="Andi" sudah terdefinisi pada properti class?

Berikut yang diartikan dalam awalnya panduan ini kali, kita sedang coba mengakses properti object dari dalam class. Bila anda kebingungan dengan pengertian ini, anda tidak sendiri. Saya kesusahan dalam pahami ide ini pada pertama kalinya belajar OOP.

Untuk memahaminya, kita harus ingat jika class hanya sebuah "blue print" atau rangka. Semua properti dan metode nanti akan diakses dari dalam object, bukan dari dalam class. Di saat proses instansiasi class, semua properti dan metode akan "di-copy" ke object.

Perintah: $laptop_baru = new laptop() akan membuat object $laptop_baru mempunyai properti $pemilik dan metode hidupkan_laptop() (sesuai rangka dari class laptop). Semua perintah kelanjutan yang kita kerjakan ada dalam object $laptop_baru, tidak di dalam class laptop.

Saat kita jalankan metode hidupkan_laptop(), object $laptop_baru akan menemui baris perintah

“Hidupkan Laptop $pemilik”

variabel $pemilik di sini tidak terdefinisi karena $pemilik ada dalam konteks class, bukan object.

Untuk menangani permasalahan ini, kita harus mengganti pengertian metode hidupkan_laptop() jadi:

"Hidupkan Laptop $this->pemilik";

Variabel $this mengarah ke object yang menginstansiasi class.

Bila dalam class laptop kita membuat:

"Hidupkan Laptop $this->pemilik";

Maka di dalam objek $laptop_baru, akan menjadi:

"Hidupkan Laptop $laptop_baru->pemilik";

Bila kita mempunyai object lain misalkan $laptop_lama, maka perintah tersebut akan dijalankan menjadi:

"Hidupkan Laptop $laptop_lama->pemilik";

Perhatikan bahwa pada level objek, variabel $this ‘dijalankan’ menjadi object saat ini.

Untuk menguji pemahaman kita, silahkan mempelajari code 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 code program itu, silakan kira-kira apa hasil yang akan diperlihatkan dari perintah: echo $laptop_lama->hidupkan_laptop() yang ada pada baris paling akhir, dan mengapa hasilnya bukan "Hidupkan Laptop Arie" ?

Bila anda dapat mengira hasil akhir secara benar dan dapat menjelaskan mengapa hasilnya bukan "Hidupkan Laptop Arie", karena itu anda sudah pahami salah satunya ide paling penting dalam Pemrograman berbasiskan object.


Makna Pseudo-Variable $this dalam Pemrograman Object PHP

Meneruskan panduan mengenai variabel $this, ini kali kita akan melihat langkah pemakaiannya lewat contoh program PHP yang lebih lengkap.

Dalam contoh berikut, saya membuat class laptop dengan metode yang sama-sama panggil metode lain memakai variabel $this, silakan anda ketahui jalur kerja dari class dan object di bawah ini:

<?php
// buat class laptop
class laptop {
  
   // buat property untuk class laptop
   public $pemilik;
   public $merk;
  
   // buat method untuk class laptop
   public function hidupkan_laptop() {
     return "Hidupkan Laptop $this->merk punya $this->pemilik";
   }
  
   public function matikan_laptop() {
     return "Matikan Laptop $this->merk punya $this->pemilik";
   }
  
   public function restart_laptop() {
     $matikan=$this->matikan_laptop();        
     $hidupkan= $this->hidupkan_laptop();
     $restart=$matikan."<br />".$hidupkan;
     return $restart;
   }
}
  
// buat objek dari class laptop (instansiasi)
$laptop_anto = new laptop();
  
// isi property objek
$laptop_anto->pemilik="Anto";
$laptop_anto->merk="Asus";
  
  
echo $laptop_anto->hidupkan_laptop();
// hasil: "Hidupkan Laptop Asus punya Anto";
  
echo "<br />";
  
echo $laptop_anto->matikan_laptop();
// hasil: "Matikan Laptop Asus punya Anto";
  
echo "<br />";
  
echo $laptop_anto->restart_laptop();
// hasil:
// "Matikan Laptop Asus punya Anto";
// "Hidupkan Laptop Asus punya Anto";
?>

Contoh class laptop di atas, serupa dengan beberapa contoh kita awalnya, dengan beberapa modifikasi. Saya membuat 2 properti: $pemilik dan $merk, selanjutnya membuat 3 metode: hidupkan_laptop(), matikan_laptop(), dan re-start_laptop().

Dalam metode hidupkan_laptop(), dan saya memanggil properti $pemilik dan $merk. Karena properti ini nanti akan dipanggil dari object, karena itu kita harus memakai variabel $this:

"Hidupkan Laptop $this->merk punya $this->pemilik";

Variabel $this nanti akan ‘merujuk' ke object yang panggil metode. Misalnya kita mempunyai object $laptop_anto, karena itu hasil yang dijalankan ialah:

"Hidupkan Laptop $laptop_anto ->merk punya $laptop_anto->pemilik";

Metode matikan_laptop() memakai skema perintah yang serupa.

Untuk metode re-start_laptop(), dalam struktur metode ini saya panggil metode matikan_laptop() dan hidupkan_laptop(). Karena argumen yang serupa dengan properti $pemilik dan $merk, saya memakai variabel $this untuk panggil metode. Hasil panggilan kedua metode, selanjutnya disambung dan diletakkan di dalam variabel $restart.

public function restart_laptop() {
   $matikan=$this->matikan_laptop();        
   $hidupkan= $this->hidupkan_laptop();
   $restart=$matikan."<br />".$hidupkan;
   return $restart;
}

Panduan kali ini ditujukan untuk melengkapi pemahaman variabel $this dari Panduan sebelumnya. Dalam panduan OOP PHP selanjutnya, kita akan membahas cara membuat metode dalam pemrograman objek PHP.