Mengenal Aksesbilitas Property & Method dengan Encapsulation

Selamat sore bro, udah mau magrib nih.. sebelum ke air saya mau ngelanjutin postingan Belajar OOP (Object Oriented Programming) Menggunakan PHP Untuk Pemula sebelumnya saya sudah memposting artikel Mengenal Constructors & Destructors dan sekarang saya melanjutkan dengan postingan ke 3 di belajar oop ini.. Selamat menyimak.. :D

Ya pertama kita tanya dulu apa itu Encapsulation? Encapsulation adalah istilah yang terkait dengan aksesbilitas property dan method dalam suatu class. Dengan encapsulation ini kita bisa mengatur sebuah property dan method. Apakah sebuah property dan method ini hanya bisa diakses didalam class saja atau bisa diakses diluar class.

Dalam encapsulation ini terbagi menjadi 3 bagian. yaitu :

  • Public => Property atau method bisa diakses dimanapun (Diluar Class)
  • Private => Property atau method hanya bisa diakses didalam class saja.
  • Protected => Property atau method hanya bisa diakses didalam class dan class turunannya saja.

Masih bingung ? Coba praktekan dibawah ini :

<?php 
/*
* Contoh Aksesbilitas Property &amp; Method dengan Encapsulation
*/

class Siswa{
	// Property
	public $nama;
	private $nilai;
	protected $kelas;

	// Constructor
	function __construct($nama,$nilai,$kelas){
		$this->nama = $nama;
		$this->nilai = $nilai;
		$this->kelas = $kelas;
	}

	// Method
	private function StatusNilai(){
		if($this->nilai >= 70) {
		$status = "Lulus";
		}else{
		$status = "Remed";
		}
		return $status;
	}

	public function bacaStatus(){
		return $this->StatusNilai();
	}
}

$dika = new Siswa('Ferdhika',85,'XII RPL A');

echo "
	Nama  : ".$dika->nama."<br>
	Nilai   : ".$dika->nilai."<br>
	Kelas   : ".$dika->kelas."<br>
	Status  : ".$dika->bacaStatus()."
";
?>

Terus coba jalanin di webserver nya, pasti bakal ada keterangan error seperti ini :

Fatal error: Cannot access private property Siswa::$nilai in /../../ on line ..

Keterangan tersebut dikarenakan kita tidak dapat memanggil property $dika->nilai yang sifatnya private dan hanya bisa diakses didalam class saja. Lalu bagaimana cara memanggilnya? Oke kita perbaiki error tersebut seperti dibawah ini.

<?php 
	/*
	* Contoh Aksesbilitas Property &amp; Method dengan Encapsulation
	*/

class Siswa{
  	// Property
    public $nama;
    private $nilai;
    protected $kelas;

    // Constructor
    function __construct($nama,$nilai,$kelas){
		$this->nama = $nama;
		$this->nilai = $nilai;
		$this->kelas = $kelas;
    }

    // Method
    protected function StatusNilai(){
		if($this->nilai >= 70) {
			$status = "Lulus";
		}else{
			$status = "Remed";
		}
		return $status;
    }

    public function bacaNilai(){
    	return $this->nilai;
    }

    public function bacaKelas(){
    	return $this->kelas;
    }
}

$dika = new Siswa('Ferdhika',85,'XII RPL A');

echo "
	Nama  : ".$dika->nama."<br>
	Nilai   : ".$dika->bacaNilai()."<br>
	Kelas   : ".$dika->bacaKelas()."<br>
	Status  : ".$dika->StatusNilai()."
";
?>

Setelah itu kita jalankan dan property $dika->nilai bisa dibaca dengan method public $dika->BacaNilai(). Namun ternyata masih ada error seperti ini.

Fatal error: Call to protected method Siswa::StatusNilai() from context '' in /.../.../ on line ..

Itu menandakan method $dika->StatusNilai() bersifat protected yang hanya bisa dibaca di dalam class dan class turunan classnya saja. Lalu bagaimana cara membaca method tadi di class turunan? mungkin ini belum di jelasin dalam artikel sebelumnya, tapi kita buat aja dulu sekilas tentang class turunan, untuk lebih lanjutnya pantengin aja artikel selanjutnya. Oke sekarang buatlah class turunan siswa seperti dibawah ini.

<?php 
	/*
	* Perbaikan Protected
  	*/

class Siswa{
	// Property
	public $nama;
	private $nilai;
	protected $kelas;

	// Constructor
	function __construct($nama,$nilai,$kelas){
		$this->nama = $nama;
		$this->nilai = $nilai;
		$this->kelas = $kelas;
	}

    // Method
	protected function StatusNilai(){
		if($this->nilai >= 70) {
			$status = "Lulus";
		}else{
			$status = "Remed";
		}
		return $status;
	}

	public function bacaNilai(){
		return $this->nilai;
	}

	public function bacaKelas(){
		return $this->kelas;
	}
}

// class turunan
class Nilai extends Siswa{
	public $status;

	public function bacaStatus(){
		$this->status = $this->StatusNilai();
		return $this->status;
	}
}

$turunan = new Nilai('Ferdhika',85,'XII RPL A');

echo "
	Nama  : ".$turunan->nama."<br>
	Nilai   : ".$turunan->bacaNilai()."<br>
	Kelas   : ".$turunan->bacaKelas()."<br>
	Status  : ".$turunan->bacaStatus()."
";

?>

Gimana? udah ga ada error lagi kan? :D kalo masih error coba perhatikan errornya dimana :p semoga tutorial lanjutan ini bermanfaat yaw.. :D sampai jumpa di tutorial selanjutnya :D