Public, Protected, Private
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 38 dari 91.
Selamat datang di bab Enkapsulasi! Enkapsulasi adalah tentang mengendalikan akses ke data internal class-mu. PHP menyediakan tiga pengubah akses yang menentukan dari mana property dan method dapat diakses: public, protected, dan private.
Berikut cara kerja setiap modifier:
<?php
class BankAccount {
public $accountHolder; // Bisa diakses dari mana saja
protected $accountNumber; // Bisa diakses dalam class ini dan class turunannya
private $balance; // Hanya bisa diakses dalam class ini
public function __construct($holder, $number, $balance) {
$this->accountHolder = $holder;
$this->accountNumber = $number;
$this->balance = $balance;
}
public function getBalance() {
return $this->balance;
}
}
$account = new BankAccount("John", "12345", 1000);
echo $account->accountHolder . "\n"; // Berfungsi, public
echo $account->getBalance(); // Berfungsi, method public
Output:
John
1000Mencoba mengakses $account->balance secara langsung akan menyebabkan error karena bersifat private. Hal yang sama berlaku untuk $account->accountNumber dari luar hierarki class. Perlindungan ini memastikan bahwa data sensitif hanya dapat diubah melalui method yang terkontrol.
| Modifier | Class yang Sama | Class Turunan | Di Luar |
|---|---|---|---|
public | Ya | Ya | Ya |
protected | Ya | Ya | Tidak |
private | Ya | Tidak | Tidak |
Poin Penting: Gunakan private untuk data internal yang tidak boleh diakses secara langsung, protected untuk data yang dibutuhkan oleh class turunan, dan public hanya untuk akses eksternal yang aman.
Tantangan
MudahMari kita bangun sistem manajemen karyawan yang aman untuk menunjukkan cara modifier akses melindungi data sensitif. Kamu akan membuat hierarki class dengan tingkat informasi yang berbeda, yang dapat diakses bergantung pada lokasi kode dijalankan: di dalam class, di dalam child class, atau dari luar.
Kamu akan mengatur kodemu dalam tiga file:
Employee.php: Buat classEmployeeyang mengelola data karyawan dengan tingkat visibilitas yang sesuai. Class ini harus memiliki:- Property
public$nameuntuk nama karyawan (aman dilihat siapa saja) - Property
protected$employeeIduntuk ID internal (dibutuhkan oleh child class) - Property
private$salaryuntuk informasi gaji yang sensitif (hanya class ini yang boleh mengaksesnya secara langsung)
getSalary()public yang mengembalikan gaji private. Ini adalah cara terkontrol untuk mengakses data yang dilindungi. Tambahkan juga methodgetPublicInfo()public yang mengembalikan"[name] works here".- Property
Manager.php: Buat classManageryang mewarisiEmployee. Sertakan file Employee. Constructor harus menerima nama, employeeId, gaji, dan nama departemen. Panggil constructor parent dengan tiga nilai pertama, lalu simpan departemen dalam property private. Tambahkan methodgetTeamInfo()public yang mengembalikan"Manager [name] (ID: [employeeId]) leads [department]". Perhatikan bahwa child class dapat mengakses$employeeIdyang protected, tetapi harus menggunakangetSalary()untuk mengakses gaji yang private.main.php: Sertakan file Manager. Kamu akan menerima empat input: nama, ID karyawan, gaji (sebagai string yang akan kamu ubah menjadi integer), dan nama departemen. Buat instanceManagerdengan nilai-nilai ini. Cetak tiga baris:- Nama manager yang diakses secara langsung (property public)
- Hasil pemanggilan
getTeamInfo() - Hasil pemanggilan
getSalary()
Tantangan ini menunjukkan enkapsulasi dalam praktik: nama dapat diakses secara bebas, ID karyawan dibagikan kepada child class melalui visibilitas protected, dan gaji tetap tersembunyi di dalam parent class, hanya dapat diakses melalui method public yang terkontrol.
Coba sendiri
<?php
require_once 'Manager.php';
// Baca input
$name = trim(fgets(STDIN));
$employeeId = trim(fgets(STDIN));
$salary = intval(trim(fgets(STDIN)));
$department = trim(fgets(STDIN));
// TODO: Buat instance Manager dengan nilai input
// TODO: Cetak nama manajer (akses langsung sebagai property publik)
// TODO: Cetak hasil pemanggilan getTeamInfo()
// TODO: Cetak hasil pemanggilan getSalary()
?>Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengenalan OOPclass vs objectKata Kunci $thismethodpropertyConstructor (__construct)Destructor (__destruct)Ringkasan: Kalkulator Sederhana4Pewarisan
Pewarisan DasarKata Kunci parent::Penimpaan methodKata Kunci finalClass AbstrakRingkasan: Hierarki Karyawan7Enkapsulasi
Public, Protected, PrivateModifier Akses secara MendalamGetter dan SetterPenyembunyian InformasiPromosi Constructor (8.0)Ulasan: Sistem Catatan Siswa2Namespace dan Autoloading
Pengenalan NamespaceKata Kunci useStandar Autoloading PSR-4Autoloader ComposerRingkasan: Proyek yang Terorganisasi5Interface dan Kontrak
Pengenalan InterfaceMengimplementasikan InterfaceImplementasi Beberapa InterfaceInterface vs Abstract ClassPetunjuk Tipe dengan InterfaceRekap: Kalkulator Bentuk8Magic Methods
Pengantar Magic Methods__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Cloning Object__serialize & __unserializeRingkasan: Koleksi Kustom11Sistem Tipe Data dan Penanganan Error
Deklarasi TipeTipe NullableTipe Union dan IntersectionClass ExceptionHierarki Exception KustomTry, Catch, FinallyRekap: Validator Form3Property dalam class
Property instance vs staticKonstanta dalam classMethod & property staticProperty private & protectedProperty readonly (PHP 8.1)Ulasan: Pengelola Rekening Bank6Polimorfisme
Meninjau Kembali Method OverridingPolimorfisme melalui AntarmukaPetunjuk Tipe dan Tipe UnionPengikatan Statis TertundaRangkuman: Pemroses PembayaranLatihan sendiri: Compiler PHP online