Property private & protected
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 18 dari 91.
Sejauh ini, kita telah menggunakan property public yang dapat diakses dari mana saja. Namun, terkadang kamu perlu membatasi akses untuk melindungi datamu. PHP menyediakan dua modifier visibilitas tambahan: private dan protected.
property private hanya bisa diakses dari dalam class yang mendefinisikannya:
<?php
class BankAccount {
private $balance = 0;
public function deposit($amount) {
$this->balance += $amount;
}
public function getBalance() {
return $this->balance;
}
}
$account = new BankAccount();
$account->deposit(100);
echo $account->getBalance();
Output:
100Mencoba mengakses $account->balance secara langsung dari luar class akan menyebabkan error. Ini melindungi saldo agar tidak diubah tanpa melalui method deposit.
Sebuah property protected bekerja dengan cara serupa, tetapi juga dapat diakses oleh class turunan yang memperluas class induk:
<?php
class User {
protected $email;
public function __construct($email) {
$this->email = $email;
}
}
class Admin extends User {
public function showEmail() {
return $this->email;
}
}
$admin = new Admin("admin@example.com");
echo $admin->showEmail();
Output:
admin@example.comPoin utama: Gunakan private saat hanya class yang mendefinisikannya yang boleh mengakses property. Gunakan protected saat child class juga perlu mengaksesnya. Keduanya mencegah akses langsung dari luar, sehingga keadaan internal object-mu tetap aman.
Tantangan
MudahMari kita bangun sistem manajemen karyawan yang aman untuk menunjukkan cara melindungi data sensitif menggunakan property private dan protected.
Kamu akan membuat tiga file yang bekerja sama untuk mengelola informasi karyawan dengan kontrol akses yang tepat:
Employee.php: Definisikan classEmployeesebagai dasar untuk semua karyawan. Class ini harus memiliki propertyprotected $name(agar child class dapat mengaksesnya) dan propertyprivate $salary(hanya class ini yang boleh mengubah gaji secara langsung). Constructor menerima nama dan gaji, lalu menetapkan kedua property tersebut. Tambahkan method publikgetName()yang mengembalikan nama, method publikgetSalary()yang mengembalikan gaji, dan method publikgiveRaise($amount)yang menaikkan gaji sebesar jumlah yang diberikan.Manager.php: Definisikan classManageryang mewarisiEmployee. Sertakan file Employee di bagian atas. Tambahkan property private$department. Constructor harus menerima nama, gaji, dan departemen: panggil constructor parent denganparent::__construct($name, $salary), lalu tetapkan departemennya. Buat methodgetDetails()yang mengembalikan"[name] manages [department]"dengan mengakses property protected$namesecara langsung. Tambahkan juga methodgetDepartment()yang mengembalikan departemen.main.php: Sertakan kedua file class. BuatManagerdengan nama"Sarah", gaji75000, dan departemen"Engineering". Cetak detail manajer menggunakangetDetails(). Lalu, naikkan gaji manajer sebesar5000dan cetak gaji barunya menggunakangetSalary(). Setiap output harus berada di barisnya sendiri.
Perhatikan cara class Manager dapat mengakses property protected $name secara langsung, tetapi harus menggunakan method getSalary() untuk mengakses gaji yang private. Ini menunjukkan perbedaan utama antara visibilitas protected dan private: protected memungkinkan child class mengaksesnya, sedangkan private menjaga data tetap tersembunyi sepenuhnya.
Coba sendiri
<?php
require_once 'Employee.php';
require_once 'Manager.php';
// TODO: Buat Manager dengan nama "Sarah", gaji 75000, dan departemen "Engineering"
// TODO: Cetak detail manajer menggunakan getDetails()
// TODO: Naikkan gaji manajer sebesar 5000
// TODO: Cetak gaji baru menggunakan 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