Belajar Pemrograman OOP PHP Part 4 - Belajar Membuat Enkapsulasi Pada Pemrograman Dasar PHP - CRUDPRO

Belajar Pemrograman OOP PHP Part 4 - Belajar Membuat Enkapsulasi Pada Pemrograman Dasar PHP

Belajar Pemrograman OOP PHP Part 4 - Belajar Membuat Enkapsulasi Pada Pemrograman Dasar PHP

Sesudah mengerti langkah membuat dan mengakses object dalam PHP, dalam panduan ini kali kita akan mengulas salah satu faktor paling penting dalam Pemrograman Berbasiskan Object (OOP), yaitu Enkapsulasi (bahasa inggris: Encapsulation). Proses enkapsulasi diterapkan dengan memakai 3 jenis hak akses: Public, Protected dan Privat.

Kita akan mempelajari Pengertian Enkapsulasi (Public, Protected dan Privat) dalam PHP.

Pengertian Dari Enkapsulasi (Encapsulation)

Enkapsulasi (encapsulation) ialah sebuah metode untuk mengatur struktur class dengan menyembunyikan jalur kerja dari class itu.

Struktur class yang diartikan ialah properti dan metode. Dengan enkapsulasi, kita dapat membuat limitasi akses ke properti dan metode, sehingga hanya properti dan metode tertentu saja yang dapat diakses di luar class. Enkapsulasi dikenal juga dengan istilah ‘information hiding'.

Dengan enkapsulasi, kita dapat pilih properti dan metode apa yang bisa diakses, dan yang mana tidak boleh diakses. Dengan merintangi code program lain untuk mengganti properti tertentu, class jadi lebih terpadu, dan menghindar kekeliruan saat seorang ‘mencoba' menggantinya. Programmer yang membuat class dapat menyediakan properti dan metode khusus yang diperuntukkan untuk diakses dari luar.

Meneruskan analogi mengenai class laptop, perusahaan pembuat laptop sudah menyiapkan ‘method' khusus untuk hidupkan laptop, yaitu dengan memencet tombol on. Dalam laptop sendiri, banyak ‘method-method' lain yang hendak digerakkan saat kita menghidupkan laptop, misalnya: mengirim signal booting ke prosesor, mengirim data dari prosesor ke memori, dan mengirimi signal listrik ke LED di monitor. Namun, proses ini ialah metode intern laptop di mana kita tak perlu memahaminya untuk hidupkan laptop.

Enkapsulasi Object: Public, Protected dan Privat

Untuk membatasi hak akses ke properti dan metode dalam suatu class, Object Oriented Programming menyediakan 3 keyword, yaitu Public, Protected dan Privat. Keyword ini ditempatkan saat sebelum nama properti atau saat sebelum nama metode. Berikut ulasannya:

Pengertian Hak Akses: Public

Saat sebuah properti atau metode dinyatakan sebagai public, karena itu semua code program di luar class dapat mengaksesnya, termasuk class turunan. Berikut contoh penulisan public properti dan public metode dalam PHP:

<?php
 
// buat class laptop
class laptop {
 
   // buat public property
   public $pemilik;
 
   // buat public method
   public function hidupkan_laptop() {
     return "Hidupkan Laptop";
   }
}
  
// buat objek dari class laptop (instansiasi)
$laptop_anto = new laptop();
  
// set property
$laptop_anto->pemilik="Anto";
  
// tampilkan property
echo $laptop_anto->pemilik; // Anto
  
// tampilkan method
echo $laptop_anto->hidupkan_laptop(); // "Hidupkan Laptop"
?>

Perhatikan tambahan kata public saat sebelum nama properti dan nama metode. Code di atas pada intinya sama dengan contoh class laptop kita dalam tutorial sebelumnya.

Bila hak akses properti dan metode tidak dicatat, karena itu PHP menganggapnya sebagai public.

Dalam contoh sebelumnya, saya membuat property class laptop menggunakan kata kunci var, seperti berikut ini:
var $pemilik;
Kata kunci var sebenarnya tidak perlu ditulis, bahkan pada PHP versi 5.0 sampai dengan 5.1.3, menggunakan kata var di dalam class akan menghasilkan warning. Untuk PHP versi 5.1.3 ke atas, menggunakan kata var tidak lagi menghasilkan warning (dianggap sebagai public). Agar sejalan dengan konsep enkapsulasi, setiap property dan method dalam class harus menggunakan kata kunci seperti public, protected, atau private. Oleh karena itu, membuat property dengan keyword var tidak disarankan lagi.

Pengertian Hak Akses: Protected

Bila sebuah properti atau metode dipastikan sebagai protected, memiliki arti properti atau metode itu tidak dapat diakses di luar class, tetapi dapat diakses oleh class tersebut atau turunan class itu.

Jika kita coba mengakses protected properti atau protected metode dari luar class, akan hasilkan error, seperti contoh berikut:

<?php
 
// buat class laptop
class laptop {
 
   // buat protected property
   protected $pemilik;
  
  // buat protected method
   protected function hidupkan_laptop() {
      return "Hidupkan Laptop";
   }
}
 
// buat objek dari class laptop (instansiasi)
$laptop_anto = new laptop();
  
// set protected property akan menghasilkan error
$laptop_anto->pemilik="Anto";
// Fatal error: Cannot access protected property laptop::$pemilik
  
// tampilkan protected property akan menghasilkan error
echo $laptop_anto->pemilik;
// Fatal error: Cannot access protected property laptop::$pemilik
  
// jalankan protected method akan menghasilkan error
echo $laptop_anto->hidupkan_laptop();
// Fatal error: Call to protected method laptop::hidupkan_laptop() 
// from context
?>

Dalam contoh di atas, pemanggilan properti $pemilik dan metode hidupkan_laptop() di luar class akan hasilkan error.

Meskipun akses tingkat protected tidak dapat diakses dari luar class, tetapi dapat diakses dari dalam class tersebut, berikut contohnya:

<?php
 
// buat class laptop
class laptop {
 
   // buat protected property
   protected $pemilik="Anto";
 
   public function akses_pemilik() {
      return $this->pemilik;
   }
   protected function hidupkan_laptop() {
      return "Hidupkan Laptop";
   }
   public function paksa_hidup() {
      return $this->hidupkan_laptop();
   }
}
  
// buat objek dari class laptop (instansiasi)
$laptop_anto = new laptop();
  
// jalankan method akses_pemilik()
echo $laptop_anto->akses_pemilik(); // "Anto"
  
// jalankan method paksa_hidup()
echo $laptop_anto->paksa_hidup(); // "Hidupkan Laptop"
?>

Hampir serupa dengan contoh kita awalnya, properti $pemilik di deklarasikan sebagai protected, sehingga pengaksesan dari luar class akan hasilkan error. Maka dari itu, saya membuat suatu public metode yang akan memperlihatkan hasil properti $pemilik, yaitu metode akses_pemilik().

Begitu halnya metode hidupkan_laptop() yang tidak dapat diakses langsung. Saya menambah metode paksa_hidup() yang internal akan terhubung metode hidupkan_laptop().

Kata kunci $this merujuk kepada objek saat ini, penjelasan tentang kata kunci $this akan kita bahas dalam tutorial berikutnya. Namun karena satu-satunya cara pengaksesan ‘isi’ class dari dalam class adalah dengan $this, jika anda tidak memahaminya silahkan lewatkan saja terlebih dahulu.

Selainnya dari dalam class tersebut, properti dan metode dengan hak akses protected bisa juga diakses dari class turunan (Kita akan mengulas mengenai pengurangan class dalam tutorial lain):

<?php
 
// buat class komputer
class komputer{
 
   // property dengan hak akses protected
   protected $jenis_processor = "Intel Core i7-4790 3.6Ghz";
}
  
// buat class laptop
class laptop extends komputer{
   public function tampilkan_processor() {
     return $this->jenis_processor;
   }
}
  
// buat objek dari class laptop (instansiasi)
$laptop_baru = new laptop();
  
// jalankan method
echo $laptop_baru->tampilkan_processor(); // "Intel Core i7-4790 3.6Ghz"
?>

Pada code di atas, meskipun metode $jenis_processor di set sebagai protected pada class computer, namun tetap dapat diakses dari class laptop yang disebut turunan dari class computer.

Pengertian Hak Akses: Privat

Hak akses paling akhir dalam ide enkapsulasi ialah privat. Bila sebuah properti atau metode di-set sebagai privat, karena itu salah satu yang dapat mengakses ialah class tersebut. Class lain tidak dapat mengaksesnya, termasuk class turunan.

Sebagai contoh, berikut hasil yang diperoleh bila kita mengakses properti dan metode dengan level privat:

<?php
 
// buat class komputer
class komputer {
   
   // property dengan hak akses protected
   private $jenis_processor = "Intel Core i7-4790 3.6Ghz";
   
   public function tampilkan_processor() {
     return $this->jenis_processor;
   }
}
  
// buat class laptop
class laptop extends komputer{
  
   public function tampilkan_processor() {
     return $this->jenis_processor;
   }
}
  
// buat objek dari class laptop (instansiasi)
$komputer_baru = new komputer();
$laptop_baru = new laptop();
  
// jalankan method dari class komputer
echo $komputer_baru->tampilkan_processor(); // "Intel Core i7-4790 3.6Ghz"
  
// jalankan method dari class laptop (error)
echo $laptop_baru->tampilkan_processor();
// Notice: Undefined property: laptop::$jenis_processor
?>

Dalam code di atas, saya membuat 2 buah class, yaitu class computer, dan class laptop. Class laptop sebagai turunan dari class computer. Dalam class computer ada properti $jenis_processor dengan akses level privat. Dalam class computer dan class laptop, saya membuat metode tampilkan_processor() yang dipakai untuk mengakses properti $jenis_processor.

Pengaksesan metode tampilkan_processor() dari object $komputer_baru sukse diperlihatkan karena ada dalam satu class di mana properti $jenis_processor ada.

Namun, bila metode tampilkan_processor() dijangkau dari object $laptop_baru yang disebut turunan dari class computer, PHP akan mengeluarkan error karena properti $jenis_processor tidak dikenali.

Akses tingkat privat kerap dipakai untuk menyembunyikan properti dan metode supaya tidak dapat diakses di luar class.


Dalam tutorial ini kali, kita sudah mengulas mengenai pengertian enkapsulasi dalam object oriented programming (OOP), mengenali 3 hak akses: public, protected, dan privat, dan melihat contoh langkah pemakaiannya dalam PHP.

Dalam tutorial belajar OOP PHP selanjutnya, kita akan mengulas mengenai pengertian dan peranan variable $this dalam PHP.