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
// 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
// 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); // 12000Perhatikan 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
// 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.