Terkadang, di jam-jam istirahat seperti saya suka sekali menulis. Menulis bukan hanya berarti menuangkan gagasan. Menulis juga berarti melompat dari zona nyaman dan mendobrak batasan - batasan yang dimiliki diri. Mengapa? Karena menulis juga berarti menyediakan ruang untuk dirimu bertumbuh dan berkembang bersama karyamu.

Terkadang, media sosial seringkali menjadi tempat yang paling sering digunakan untuk menulis. Ya, media sosial itu seperti ruang pribadi yang terpublikasi. Mengapa? Karena di sana bukan tempat di mana tulisan - tulisan kita terpajang. Tetapi juga tempat di mana orang lain dapat menemukan beberapa hal tentang diri kita.

Oleh karena itu, sebelum mempublikasi tulisan, saya selalu mengatur kepada siapa tulisan itu akan saya bagikan. Untuk publik, untuk lingkaran teman - teman media sosial saja, ataupun hanya untuk saya sendiri. Kita bisa mengatur siapa saja yang bisa mengakses tulisan - tulisan kita di media sosial. Karena tidak semua hal yang worth-writing itu worth-sharing.

Sama dengan halnya media sosial, di dalam OOP pun kita bisa mengatur siapa saja yang bisa mengakses method ataupun properti yang ada di dalam class. Apakah bisa diakses oleh siapapun, di dalam class dan juga di luar class? Apakah hanya bisa diakses di dalam class saja? Atau hanya bisa diakses di dalam class dan class turunannya saja? Kawan, inilah yang disebut dengan Encapsulation.

Apa itu Encapsulation?

Encapsulation adalah istilah yang terkait dengan aksesbilitas properti dan method dalam suatu class. Nah, di dalam encapsulation ini terbagi menjadi 3 Access Modifier, yaitu:

  1. Public : Properti atau method bisa diakses di mana saja, bisa dari dalam class dan juga luar class.
  2. Private : Properti atau method hanya bisa diakses di dalam class saja.
  3. Protected : Properti atau method hanya bisa diakses di dalam class dan class turunannya saja.

Maksudnya gimana sih belum paham? Nah, kalau belum paham. Check this code out ya!

<?php
/*
* Aksesbilitas Property & Method dengan Encapsulation
*/
class Mahasiswa
{
    public $nim;
    private $nama;
    protected $nilai;

    public function __construct($nim, $nama, $nilai)
    {
        $this->nim = $nim;
        $this->nama = $nama;
        $this->nilai = $nilai;
    }

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

    public function BacaStatus()
    {
        echo $this->StatusNilai;
    }
}

$mahasiswa = new Mahasiswa(1430511105, 'Gun Gun Priatna', 95);
echo "NIM : " . $mahasiswa->nim . "<br />";
echo "Nama : " . $mahasiswa->nama . "<br />";
echo "Nilai : " . $mahasiswa->nilai . "<br />";
echo "Status : " . $mahasiswa->StatusNilai() . "<br />";
?> 

Nah, coba kamu jalankan kode di atas di browser kamu. kurang lebih hasilnya error kaya gini...

 Fatal error: Uncaught Error: Cannot access private property Mahasiswa::$nama in /opt/lampp/htdocs/belajar_php/acc1.php:35 Stack trace: #0 {main} thrown in /opt/lampp/htdocs/belajar_php/acc1.php on line 35 

Lho kok error? Soalnya kita ga bisa manggil properti $mahasiswa->nama yang sifatnya private dan hanya bisa diakses di dalam class saja. Terus gimana dong kalau mau manggil itu? Nah, sekarang kita coba perbaiki kodenya. check this out ya! ^^

 <?php

/*

* Perbaikan Private Property

*/

class Mahasiswa
{
    public $nim;

    private $nama;

    protected $nilai;

    public function __construct($nim, $nama, $nilai)
    {
        $this->nim = $nim;

        $this->nama = $nama;

        $this->nilai = $nilai;
    }

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

        return $status;
    }

    // Membuat Method Untuk Memanggil Property Private ($nama)

    public function BacaNama()
    {
        return $this->nama;
    }

    // Membuat Method Untuk Memanggil Property Private ($nama)

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

$mahasiswa = new Mahasiswa(1430511105, 'Gun Gun Priatna', 95);

echo "NIM : ".$mahasiswa->nim."<br />";

echo "Nama : ".$mahasiswa->BacaNama()."<br />";

echo "Nilai : ".$mahasiswa->BacaNilai()."<br />";

echo "Status : ".$mahasiswa->StatusNilai()."<br />";

Kita save dulu terus kita run di browser. Nah, sekarang propertinya udah bisa dibaca pakai method public $mahasiswa->BacaNama(). Tapi kok masih ada errornya ya? Ada error kaya gini.

 Fatal error: Uncaught Error: Call to protected method Mahasiswa::StatusNilai() from context '' in /opt/lampp/htdocs/belajar_php/acc2.php:44 Stack trace: #0 {main} thrown in /opt/lampp/htdocs/belajar_php/acc2.php on line 44 

Nah, kalau yang ini sebab errornya itu gara-gara method StatusNilai() itu sifatnya protected, jadi hanya bisa dibaca di dalam class dan class turunannya saja. lho terus gimana cara baca method ini dong? Solusinya itu kita mesti buat class turunan mahasiswa. Misalnya kita buat class Nilai kaya gini...

<?php

/*

* Perbaikan Protected Method

*/

class Mahasiswa
{
    public $nim;

    private $nama;

    protected $nilai;

    public function __construct($nim, $nama, $nilai)
    {
        $this->nim = $nim;

        $this->nama = $nama;

        $this->nilai = $nilai;
    }

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

        return $status;
    }

    // Membuat Method Untuk Memanggil Property Private ($nama)

    public function BacaNama()
    {
        return $this->nama;
    }

    // Membuat Method Untuk Memanggil Property Private ($nama)

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

/**

* Class Turunan Mahasiswa dengan nama class Nilai

*/

class Nilai extends Mahasiswa
{
    public $status;

    public function BacaStatus()
    {
        $this->status = $this->StatusNilai();

        return $this->status;
    }
}

$turunan = new Nilai(1430511105, 'Gun Gun Priatna', 95);

echo "NIM : ".$turunan->nim."<br />";

echo "Nama : ".$turunan->BacaNama()."<br />";

echo "Nilai : ".$turunan->BacaNilai()."<br />";

echo "Status : ".$turunan->BacaStatus()."<br />";

Gimana? Udah gak ada errornya kan?

Semoga bermanfaat.. Semangat terus belajarnya yaa~! ^^

Gun Gun Priatna
Software Engineer, Content Writer and Founder qadrlabs.com
Komentar

blog comments powered by Disqus