Getter dan Setter
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 40 dari 91.
Sekarang setelah kamu memahami modifier akses, bagaimana cara berinteraksi dengan aman dengan property privat dari luar class? Jawabannya adalah getter dan setter, method publik yang memberikan akses terkontrol ke data privat.
getter mengambil nilai property, sedangkan setter mengubahnya. Pola ini memungkinkan kamu menambahkan validasi atau logika saat data diakses atau diubah:
<?php
class User {
private string $email;
private int $age;
public function getEmail(): string {
return $this->email;
}
public function setEmail(string $email): void {
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
$this->email = $email;
}
}
public function getAge(): int {
return $this->age;
}
public function setAge(int $age): void {
if ($age >= 0 && $age <= 150) {
$this->age = $age;
}
}
}
$user = new User();
$user->setEmail("john@example.com");
$user->setAge(25);
echo $user->getEmail() . "\n";
echo $user->getAge();
Output:
john@example.com
25Setter memvalidasi format email dan memastikan usia masuk akal sebelum menyimpan nilainya. Tanpa setter, siapa pun bisa menetapkan data yang tidak valid secara langsung. Kamu juga bisa membuat property hanya-baca dengan menyediakan getter saja, atau property hanya-tulis dengan setter saja.
Poin Penting: Getter dan setter memberimu kendali atas cara data privat diakses dan diubah, sehingga kamu dapat melakukan validasi, pemformatan, atau logika khusus apa pun.
Tantangan
MudahMari kita buat sistem inventaris produk yang menggunakan getter dan setter untuk melindungi dan memvalidasi data produk. Kamu akan membuat class Product yang memastikan harga selalu positif dan jumlah stok tidak pernah negatif. Ini menunjukkan cara setter menerapkan aturan bisnis.
Kamu akan menyusun kodemu dalam dua file:
Product.php: Buat classProductdengan tiga property private:$name(string),$price(float), dan$stock(integer). Buat getter dan setter untuk setiap property dengan aturan validasi berikut:setName()hanya boleh menerima string yang tidak kosong. Jika string kosong setelah dipangkas, jangan perbarui property.setPrice()hanya boleh menerima nilai yang lebih besar dari 0: tolak harga nol atau negatif.setStock()hanya boleh menerima nilai 0 atau lebih besar: tolak jumlah stok negatif.
getInfo()yang mengembalikan"[name]: $[price] ([stock] in stock)"dengan harga yang diformat hingga 2 angka desimal.main.php: Sertakan file Product. Kamu akan menerima empat input: nama produk, harga, jumlah stok, dan harga baru untuk memperbarui harga. Buat instanceProductdan gunakan setter untuk menetapkan nama, harga awal (dikonversi menjadi float), dan stok (dikonversi menjadi integer). Cetak hasilgetInfo(). Lalu coba perbarui harga dengan nilai harga baru (dikonversi menjadi float) dan cetakgetInfo()sekali lagi. Terakhir, coba tetapkan stok menjadi-5(nilai yang tidak valid) dan cetakgetInfo()sekali lagi untuk memastikan stok tidak berubah.
Setter-mu bertindak sebagai penjaga gerbang. Setter memvalidasi data yang masuk sebelum mengizinkan perubahan pada property private. Saat data yang tidak valid diberikan, seperti stok negatif, setter cukup mengabaikannya sehingga nilai valid yang sudah ada tetap dipertahankan. Inilah kekuatan enkapsulasi: object-mu menjaga integritasnya, apa pun yang coba dilakukan kode eksternal.
Coba sendiri
<?php
require_once 'Product.php';
// Baca input
$name = trim(fgets(STDIN));
$price = trim(fgets(STDIN));
$stock = trim(fgets(STDIN));
$newPrice = trim(fgets(STDIN));
// TODO: Buat instance Product baru
// TODO: Gunakan setter untuk menetapkan name, price (sebagai float), dan stock (sebagai integer) awal
// TODO: Cetak hasil getInfo()
// TODO: Perbarui price dengan newPrice (sebagai float), lalu cetak getInfo() lagi
// TODO: Coba atur stock menjadi -5 (tidak valid), lalu cetak getInfo() untuk memastikan stock tidak berubah
?>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