Dalam materi kali ini kita akan membahas tentang apa itu enkapsulasi pada php.
Enkapsulasi / Pengkapsulan adalah konsep melindungi kode sumber yang ada pada Class dari pengaksesannya dari luar Class.
Merupakan konsep pembatasan akses, terhadap Property dan juga Method yang ada pada sebuah Class, untuk di akses dari luar Class.
Dengan proses Pengkapsulan ini, seorang Developer dapat menentukan apakah Property dan juga Method yang dibuat dapat digunakan di luar Class, atau hanya dapat digunakan oleh Class itu sendiri dan juga turunannya ?
Hal ini dilakukan untuk melindungi code yang ada di dalam Property dan juga Method tersebut. Agar nilai – nya tidak dirubah – ubah oleh Developer lain, karena sudah di definisikan sebagai nilai mutlak, dan biasanya kalau dirubah, maka program tidak akan berjalan sebagaimana yang diharapkan.
Proses Pengkapsulan terbagi ke dalam 3 cara, yakni Public, Protected, dan juga Private. 3 Keyword ini di definisikan sebelum pendefinisian Property dan Method. Sekarang mari kita bahas fungsi dari ketiga keyword ini :
Pengertian Hak Akses Public
Hak Akses Public, dengan keyword ini, berarti anda mendefinisikan supaya Property dan juga Method dapat di akses oleh Class turunan dan juga di luar Class. Contoh :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php class Hamba{ // Pembuatan Property public $nama = ''; // Pembuatan Method public function jalan(){ return 'Menggunakan kaki, secara bergantian.'; } } // Intansiasi Object $Manusia = new Hamba ?> |
Maka ketika Property dan juga Method tersebut di akses, tidak akan muncul error apapun.
1 2 |
<p>Hai, nama saya <?= $Manusia->nama = 'Amir'; ?></p> <p>Saya berjalan dengan <?= $Manusia->jalan(); ?> </p> |
Berikut kode lengkapnya :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php class Hamba{ // Pembuatan Property public $nama = ''; // Pembuatan Method public function jalan(){ return 'Menggunakan kaki, secara bergantian.'; } } // Intansiasi Object $Manusia = new Hamba; ?> <p>Hai, nama saya <?= $Manusia->nama = 'Amir'; ?></p> <p>Saya berjalan dengan <?= $Manusia->jalan(); ?> </p> |
Dan di bawah ini adalah outputnya :
Dengan keyword Public anda juga dapat membuat Property/Method dapat di akses oleh Class turunan.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php class Hamba{ // Pembuatan Property public $nama = 'Groot'; // Pembuatan Method public function jalan(){ return 'Menggunakan kaki, secara bergantian'; } } // Class Turunan class Alien extends Hamba{ //Mewarisi cara jalan dari Class Hamba public function caraJalan(){ return $this->jalan(); } } // Intansiasi Object Class Turunan (Alien) $Groot = new Alien; ?> <p>Hai, saya Alien, nama saya <?= $Groot->nama; ?>.</p> <p>Saya berjalan dengan <?= $Groot->caraJalan() ?>.</p> |
Dari kode sumber di atas, pasti anda menemui keyword $this, keyword ini merujuk pada Property/Method yang saat ini digunakan, kita akan membahas keyword ini panjang lebar pada materi lainnya.
Dan hasil dari kode sumber di atas adalah seperti gambar berikut :
Pengertian Hak Akses Protected
Hak Akses Protected, jika sebuah Property / Method di definisikan sebagai Protected, maka Property dan Method tersebut hanya dapat di akses dari dalam Class itu sendiri dan juga Class turunan.
Berikut contohnya, dimana sebuah Property / Method di akses dari dalam Class itu sendiri :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<?php class OrangTua{ // Pembuatan Property Protected protected $kadar_gula = 'Tinggi'; // Pembuatan Method Protected protected function ciriFisik(){ return 'Cara Jalan Cepat'; } // Mengakses Property $kadar_gula yang di definisikan sebagai Protected public function kadarGulaSaya(){ return $this->kadar_gula; } // Mengakses Method ciriFisik() yang di definisikan sebagai Protected public function ciriFisikSaya(){ return $this->ciriFisik(); } } // Intansiasi Object Class Parent $Amir = new OrangTua; ?> <h3>Parent</h3> <p>Kadar Gula saya <?= $Amir->kadarGulaSaya() ?></p> <p>Saya memiliki <?= $Amir->ciriFisikSaya() ?></p> |
Silahkan jalankan kode sumber di atas, maka anda tidak akan mendapatkan error apapun.
Selain dapat di akses dari dalam Class, Property / Method yang di definisikan sebagai Protected juga dapat di akses oleh Class yang menjadi turunannya, atau biasa disebut Class Anak / Child Class. Untuk membuat Class Anak, anda harus menambahkan keyword extends setelah pendeklarasian Class Anak tersebut.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
<?php // Pembuatan Class Orang Tua class OrangTua{ // Pembuatan Property Protected protected $kadar_gula = 'Tinggi'; // Pembuatan Method Protected protected function ciriFisik(){ return 'Cara Jalan Cepat'; } // Mengakses Property $kadar_gula yang di definisikan sebagai Protected public function kadarGulaSaya(){ return $this->kadar_gula; } // Mengakses Method ciriFisik() yang di definisikan sebagai Protected public function ciriFisikSaya(){ return $this->ciriFisik(); } } // Pembuatan Class Anak Class Anak extends OrangTua{ // Property Class Anak, bernilai Property dari Class Parent public function kadar_gula_anak(){ return $this->kadar_gula; } // Method Class Anak, bernilai Method dari Class Parent public function ciriFisikAnak(){ return $this->ciriFisik(); } } // Intansiasi Object Class Orang Tua $Amir = new OrangTua; // Intansiasi Object Class Anak $Hasan = new Anak; ?> <h3>Parent</h3> <p>Kadar Gula saya <?= $Amir->kadarGulaSaya() ?></p> <p>Saya memiliki <?= $Amir->ciriFisikSaya() ?></p> <hr> <h3>Anak</h3> <p>Kadar Gula saya <?= $Hasan->kadar_gula_anak() ?></p> <p>Saya memiliki <?= $Hasan->ciriFisikAnak() ?></p> |
Dan apabila kode sumber di atas anda jalankan, anda tidak akan menemui error apapun.
Namun apabila Property / Method dengan hak akses Protected anda akses dari luar Class, maka akan menampilkan pesan Error.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php // Pembuatan Class Orang Tua class OrangTua{ // Pembuatan Property Protected protected $kadar_gula = 'Tinggi'; // Pembuatan Method Protected protected function ciriFisik(){ return 'Cara Jalan Cepat'; } } // Intansiasi Object Class Parent $Amir = new OrangTua; ?> <h3>Parent</h3> <p>Kadar Gula saya <?= $Amir->kadar_gula ?></p> <p>Saya memiliki <?= $Amir->ciriFisik() ?></p> |
Output :
Pengertian Hak Akses Private
Terakhir adalah tipe hak akses Private, dimana jika sebuah Property / Method di definisikan sebagai Private, maka Property / Method tersebut hanya dapat di akses dari dalam Class yang mendefinisikannya dan akan menghasilkan error apabila di akses dari luar Class / Class turunan – nya.
Contoh Pengaksesan dari dalam Class :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php class Mobil { private $nomor_seri = 'A77FFH'; private function speed(){ return '500km/jam'; } public function nomor_seri(){ return $this->nomor_seri; } } $Nissan = new Mobil; ?> <p>Nomor seri Mobil Nissan = <?= $Nissan->nomor_seri() ?></p> |
Pada source code di atas saya mendefinisikan Property $nomor_seri dan Method speed() sebagai Private. Namun saya mencoba untuk mengakses Property $nomor_seri, dari dalam Class melalui Method nomor_seri() yang saya definisikan secara public.
Maka tidak akan menghasilkan Error apa pun.
Namun jika anda mengaksesnya dari luar Class, maka akan menghasilkan error. Pada contoh ini, saya gunakan fungsi speed() yang sebelumnya saya definisikan sebagai private dan akan saya akses dari luar Class.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
<?php class Mobil { private $nomor_seri = 'A77FFH'; private function speed(){ return '500km/jam'; } public function nomor_seri(){ return $this->nomor_seri; } } $Nissan = new Mobil; ?> <p>Nomor seri Mobil Nissan = <?= $Nissan->speed() ?></p> |
Maka akan menghasilkan error.
Dapat dapat anda lihat juga pada pesan Error yang saya garis bawahi. Dimana pada pesan error tersebut saya mencoba mengakses “Call to private method” sehingga di anggap error yang fatal.
Dan yang terakhir, anda juga tidak dapat mengakses Private Property/Method dari Class turunan. Karena pada intinya, Property/Method yang bersifat Private hanya dapat di akses oleh Class yang mendefinisikannya.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php class Mobil { private $nomor_seri = 'A77FFH'; private function speed(){ return '500km/jam'; } public function nomor_seri(){ return $this->nomor_seri; } } class Motor extends Mobil{ public function nomor_seri_motor(){ return $this->nomor_seri; } } $SupraX = new Motor; ?> <p>Nomor seri Motor Supra X = <?= $SupraX->nomor_seri_motor() ?></p> |
Dapat anda perhatikan pada method :
1 |
<?= $SupraX->nomor_seri_motor() ?> |
Saya coba mengambil Property $nomor_seri yang dimiliki Class parent lewat script :
1 |
return $this->nomor_seri;. |
Namun tidak berhasil, dan malah mengeluarkan pesan error, yakni error pada baris 19 :
Hal ini menandakan jika saya tidak dapat mengakses Private Property dari Parent Class ke Child Class. Namun anda dapat mengakalinya, yakni dengan membuat Method yang bersifat Public pada Class yang mendefinisikan Private Property tersebut, dimana Public Method ini mengambil Private Property – nya. Dalam hal ini, saya mendefinisikannya pada method nomor_seri().
1 2 3 |
public function nomor_seri(){ return $this->nomor_seri; } |
Kemudian pada Method nomor_seri_motor(), silahkan anda rubah statement di dalamnya menjadi return $this->nomor_seri();.
Sebelum :
1 2 3 |
public function nomor_seri_motor(){ return $this->nomor_seri; } |
Sesudah :
1 2 3 |
public function nomor_seri_motor(){ return $this->nomor_seri(); } |
Maka tidak akan mengeluarkan error apapun.
Demikian tutorial dari Apa Itu Enkapsulasi Pada PHP. Silahkan kunjungi tutorial lainnya seperti Class dan Object atau Method dan Property.
4 thoughts on “Apa Itu Enkapsulasi Pada PHP”
thanks gan, tutorialnya membantu banget