Apa kesamaannya ? Yaitu sama-sama di akses dengan setter-getter dan berhasil 😁
Disini akan dibahas tentang bedanya, agar bisa lebih memahami perbedaannya. Mari ingat kembali definisi yang telah baca sebelumnya terkait modifier ini :
Pertama, Public
Merupakan modifier yang memungkinkan sebuah member class dapat di akses bebas. Baik dari dalam class ataupun dari luar class.
Kedua, Private
Merupakan modifier yang membuat sebuah member hanya dapat di akses dari dalam class dan objek yang dibuat dari class turunan, tidak diperkenankan untuk mengakses member class dari objek yang di instance langsung dari class induk ( error ).
Ketiga, Protected
Merupakan modifier yang dimana membernya hanya dapat diakses menggunakan method setter dan getter di kelas itu sendiri dan sub class / turunan dari class tersebut.
Skip untuk modifier public, langsung dengan dua saudaranya yang lain. Kita ubah class sebelumnya menjadi :
class Buku {
public $nama;
private $penulis;
protected $penerbit;
var $tahunTerbit;
}
Lalu kita buat lanjutkan dengan membuat sebuah class turunan dari class Buku {}. Gunakan kata kunci extends untuk membuat class turunan :
class Penulis extends Buku { }
Penulis diatas merupakan class turunan yang mewarisi seluruh member dan karakteristik dari class Buku {}. Selanjutnya kita tambahkan method setter dan getter di dalamnya :
Bisa juga kita tambahkan member lain, seperti contoh menambahkan property $namaPenulis
public $namaPenulis;
public function setPenulis($namaPenulis) {
$this->penulis = $namaPenulis;
}
public function getPenulis() {
echo $this->penulis;
}
Kode class induk ( Buku {} ) dan class turunan ( Penulis {} ) menjadi :
<?php
class Buku {
public $nama;
private $penulis;
protected $penerbit;
var $tahunTerbit;
}
class Penulis extends Buku {
public $namaPenulis;
public function setPenulis($namaPenulis) {
$this->penulis = $namaPenulis;
}
public function getPenulis() {
echo $this->penulis;
}
}
?>
Sekarang mari kita buat objek untuk masing-masing class tersebut
$buku = new Buku();
$dataBuku = new Penulis();
Mari kita akses langsung properti $penulis menggunakan objek $buku :
$buku->penulis = "Ahmad Istakim Sy"; // akses member private penulis dari objek class induk
echo $buku->penulis;
echo "<hr>";
Lihat hasilnya di browser :
Hasilnya Error 👀
Sekarang mari kita coba untuk mengakses melalui objek yang dibuat dari class turunan
$dataBuku->penulis = "Ahmad Istakim"; // akses member private penulis dari objek class turunan
echo $dataBuku->penulis;
echo "<hr>";
Bagaimana hasilnya, cek di browser!
Wow, berhasil ternyata ya :)
Muncul datanya, sesuai dengan definisi yang disebutkan di awal tadi bahwa Private :
Merupakan modifier yang membuat sebuah member hanya dapat di akses dari dalam class dan objek yang dibuat dari class turunan, tidak diperkenankan untuk mengakses member class dari objek yang di instance langsung dari class induk ( error ).
Kode lengkap untuk private :
<?php
class Buku {
public $nama;
private $penulis;
protected $penerbit;
var $tahunTerbit;
}
class Penulis extends Buku {
public $namaPenulis;
public function setPenulis($namaPenulis) {
$this->penulis = $namaPenulis;
}
public function getPenulis() {
echo $this->penulis;
}
}
class Penerbit extends Buku {
public $namaPenerbit;
public function setPenerbit($namaPenerbit) {
$this->penerbit = $namaPenerbit;
}
public function getPenerbit() {
echo $this->penerbit;
}
}
$buku = new Buku();
$dataBuku = new Penulis();
$buku->penulis = "Ahmad Istakim Sy"; // akses member private penulis dari objek class induk
echo $buku->penulis;
echo "<hr>";
$dataBuku->penulis = "Ahmad Istakim"; // akses member private penulis dari objek class turunan
echo $dataBuku->penulis;
echo "<hr>";
?>
Perkodingan akan cepat dipahami jika dilakukan sambil praktik! Tidak hanya sekedar membaca. Kesimpulan akan mengikuti seiring dengan seringnya melakukan coding
Berikutnya untuk modifier protected, mari kita lakukan uji dengan kode :
public $nama;
private $penulis;
protected $penerbit;
var $tahunTerbit;
Yang akan kita operasikan sekarang member $penerbit dengan modifier protected.
Buat class turunan Penerbit dari class Buku {} :
class Penerbit extends Buku {
public $namaPenerbit;
public function setPenerbit($namaPenerbit) {
$this->penerbit = $namaPenerbit;
}
public function getPenerbit() {
echo $this->penerbit;
}
}
Kemudian buat dua objek, sama seperti tadi. Satu objek untuk class induk dan satu untuk class turunan :
$buku = new Buku();
$dataBuku = new Penerbit();
Di bagian bawah objek, kita akses member property $penerbit dengan objek dari class induk terlebih dahulu :
$buku->penerbit = "Ahmad Istakim Sy"; // akses member protected dari objek class induk
echo $buku->penerbit;
echo "<hr>";
Kode lengkapnya :
<?php
class Buku {
public $nama;
private $penulis;
protected $penerbit;
var $tahunTerbit;
}
class Penulis extends Buku {
public $namaPenulis;
public function setPenulis($namaPenulis) {
$this->penulis = $namaPenulis;
}
public function getPenulis() {
echo $this->penulis;
}
}
class Penerbit extends Buku {
public $namaPenerbit;
public function setPenerbit($namaPenerbit) {
$this->penerbit = $namaPenerbit;
}
public function getPenerbit() {
echo $this->penerbit;
}
}
$buku = new Buku();
$dataBuku = new Penerbit();
$buku->penerbit = "Ahmad Istakim Sy"; // akses member protected dari objek class induk
echo $buku->penerbit;
echo "<hr>";
Mari jalankan kode kita, apa hasilnya?
Wew, error bukan ?
Sekarang kita coba akses dengan objek yang dibuat dari class turunan :
$dataPenerbit = new Penerbit(); // instance objek dari class turunan
$dataPenerbit->penerbit = "AIS Press"; // akses member protected penerbit dari objek class turunan
echo $dataPenerbit->penerbit;
Mari jalankan di browser :
Tetap error nih 👀
Tapi, memang begitu. Member class dengan modifier protected tidak bisa diakses langsung baik dengan objek class induk atau turunan. Sesuai lagi kan dengan definisi modifier protected di awal. Sampai sini paham perbedaan dari modifier private dan protected ?
Kesimpulan dari dua modifier ini adalah member property tidak bisa di akses langsung dengan objek yang di instance dari class induk. Tetapi untuk untuk modifier private, di izinkan langsung mengakses member dengan objek dari class turunan.
Keduanya memiliki persamaan bisa diakses baik dari objek class induk / turunan jika menggunakan method (
setter -
getter ) dalam operasinya.
Baca kembali :
Mengenal Method Setter - Getter
Semoga membantu! Mangatz...