oopclassMahir3 mnt baca

Class & Object Dasar

Cetak biru dan wujudnya: membuat class, instansiasi object, dan $this.

Analogi: Cetakan Kue dan Kuenya

Class adalah cetakan kue: ia bukan kue, tapi pola untuk membuat banyak kue yang sama. Object adalah kue hasil cetakan: nyata, bisa dimakan, masing-masing punya taburan berbeda. Di program, class Siswa adalah cetakan, sedangkan $sinta = new Siswa() adalah objek nyata berisi data Sinta.

Kenapa repot-repot? Tanpa class, data siswa tersebar sebagai array lepas dan fungsi-fungsi lepas. Dengan class, data dan perilaku dibungkus jadi satu kesatuan: objek siswa tahu namanya dan bisa menghitung rata-ratanya sendiri.

php
<?php
// Contoh 1: class pertama dan dua objek independen
class Siswa {
    public string $nama = "";
    public array $nilai = [];

    public function sapa(): string {
        return "Halo, saya " . $this->nama;
    }

    public function rataRata(): float {
        if ($this->nilai === []) return 0.0;
        return array_sum($this->nilai) / count($this->nilai);
    }
}

$sinta = new Siswa();
$sinta->nama = "Sinta";
$sinta->nilai = [85, 90, 78];

$budi = new Siswa();
$budi->nama = "Budi";
$budi->nilai = [70, 75];

echo $sinta->sapa();              // "Halo, saya Sinta"
echo $sinta->rataRata();          // 84.33
echo $budi->rataRata();           // 72.5: data Budi tidak tercampur Sinta!

$this adalah kata kunci ajaib: "objek yang sedang dipakai saat ini". Saat $sinta->rataRata() dipanggil, $this menunjuk ke $sinta; saat $budi->rataRata(), menunjuk ke $budi. Masing-masing objek punya salinan data sendiri (disebut state), tapi berbagi perilaku yang sama dari class.

php
<?php
// Contoh 2: method menerima parameter dan mengubah state
class Kasir {
    public float $total = 0.0;

    public function tambah(float $harga, int $qty = 1): void {
        $this->total += $harga * $qty;
    }

    public function bayar(float $uang): float {
        $kembalian = $uang - $this->total;
        $this->total = 0;   // reset setelah bayar, siap transaksi baru
        return $kembalian;
    }
}

$kasir = new Kasir();
$kasir->tambah(15000, 2);
$kasir->tambah(8000);
echo $kasir->bayar(50000);   // 12000

Perhatikan tambah() mengubah $this->total: method boleh membaca DAN mengubah state objeknya. Inilah inti OOP: objek adalah "mesin kecil" yang menyimpan data dan menyediakan tombol-tombol (method) untuk mengoperasikannya.

Jebakan yang Sering Terjadi

Lupa new. $s = Siswa(); tanpa new memicu error. Membuat objek selalu new NamaClass(). Satu-satunya pengecualian adalah static (modul tersendiri).

Mengakses property dengan $this->$nama. Di dalam class, property diakses $this->nama (tanpa $ setelah panah!). $this->$nama artinya "property yang namanya tersimpan di variabel $nama", fitur variable property yang jarang dibutuhkan dan membingungkan pemula.

Kapan Memakai Class?

Tanda-tandanya kamu butuh class:

  • Data dan fungsi yang mengolahnya selalu muncul bersama (data siswa + hitung rata-rata).
  • Ada banyak salinan dengan struktur sama (30 siswa, 100 produk).
  • Butuh menjamin validitas (rekening tidak boleh minus).

Sebaliknya, jangan buat class untuk: satu fungsi utilitas murni (pakai fungsi biasa/static), atau data sekali pakai (pakai array asosiatif). Aturan: class untuk "benda" yang punya identitas dan perilaku, array untuk data pasif.

php
<?php
// Array cukup untuk data pasif:
$config = ["host" => "localhost", "port" => 3306];

// Class untuk benda ber-perilaku:
class Lampu {
    private bool $nyala = false;
    public function toggle(): void { $this->nyala = !$this->nyala; }
    public function status(): string { return $this->nyala ? "menyala" : "mati"; }
}

Catatan teknis: Nama class memakai PascalCase (Siswa, KasirToko) mengikuti konvensi PSR, sedangkan method dan property memakai camelCase (rataRata, $totalBayar). Konsistensi penamaan membuat kodemu terlihat profesional sejak awal.

Tantangan

Class Buku

Buat class Buku dengan property $judul, $penulis, dan method info() yang mengembalikan "Judul oleh Penulis". Buat 2 object buku berbeda dan tampilkan info keduanya.