Menu
CoddyTech

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
25

Setter 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.

challenge icon

Tantangan

Mudah

Mari 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 class Product dengan 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.
    Setiap getter cukup mengembalikan nilai property yang sesuai. Tambahkan method publik 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 instance Product dan gunakan setter untuk menetapkan nama, harga awal (dikonversi menjadi float), dan stok (dikonversi menjadi integer). Cetak hasil getInfo(). Lalu coba perbarui harga dengan nilai harga baru (dikonversi menjadi float) dan cetak getInfo() sekali lagi. Terakhir, coba tetapkan stok menjadi -5 (nilai yang tidak valid) dan cetak getInfo() 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

?>
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler PHP online