The Blueprint & The Product
Cetakan vs Barang Jadi
Class adalah cetak biru (blueprint) atau template untuk membuat objek.
Class mendefinisikan karakteristik (data) dan perilaku (fungsi) yang akan dimiliki oleh objek.
Object adalah hasil nyata (instance) dari sebuah Class.
Jika Class adalah cetakan kue, maka Object adalah kue-nya.
Gambar Desain
Spec Mesin
Warna (Belum ditentukan)
Toyota Avanza
Hitam
Kita bisa membuat banyak objek berbeda dari satu class yang sama.
Setiap objek memiliki data (state) sendiri-sendiri yang independen.
Menulis Kode Pabrik
Gunakan keyword class diikuti nama class.
Aturan penamaan: Gunakan PascalCase (Huruf awal besar).
class Mobil {
// Body class kosong
}
Gunakan keyword new.
$mobilA = new Mobil();
$mobilB = new Mobil();
var_dump($mobilA);
// object(Mobil)#1 (0) { }
Data / Atribut / Sifat
Variabel yang ada di dalam class.
Merepresentasikan data atau keadaan (state) dari objek.
Harus diawali dengan visibility keyword (public, protected, private) atau var (jadul).
class Mobil {
public $merk;
public $warna;
public $kecepatan = 0; // Default value
}
Gunakan tanda panah ->.
$avanza = new Mobil();
// Set nilai
$avanza->merk = "Toyota";
$avanza->warna = "Hitam";
// Ambil nilai
echo $avanza->merk; // Output: Toyota
$brio = new Mobil();
$brio->merk = "Honda";
echo $avanza->merk; // Tetap "Toyota"
echo $brio->merk; // "Honda"
Mengubah property satu objek TIDAK mempengaruhi objek lain.
Perilaku / Fungsi / Aksi
Fungsi yang ada di dalam class.
Merepresentasikan apa yang bisa dilakukan oleh objek tersebut.
class Mobil {
public function hidupkanMesin() {
echo "Mesin menyala... Brum!";
}
public function jalan() {
echo "Mobil berjalan...";
}
}
Sama seperti property, gunakan tanda panah ->.
$avanza = new Mobil();
$avanza->hidupkanMesin();
// Output: Mesin menyala... Brum!
Menunjuk Diri Sendiri
Bagaimana cara method mengakses property dalam class yang sama?
class Mobil {
public $merk;
public function sebutMerk() {
// echo $merk; // ERROR! Undefined variable
}
}
$this adalah variabel spesial yang merujuk pada Objek Saat Ini (Current
Object).
class Mobil {
public $merk;
public function sebutMerk() {
echo "Saya adalah mobil " . $this->merk;
}
}
$a = new Mobil();
$a->merk = "Toyota";
$a->sebutMerk(); // $this merujuk ke $a -> "Toyota"
$b = new Mobil();
$b->merk = "Honda";
$b->sebutMerk(); // $this merujuk ke $b -> "Honda"
Kita juga bisa memanggil method lain dalam class yang sama menggunakan $this.
class Mobil {
public function start() {
$this->cekBensin(); // Panggil method lain
echo "Jalan!";
}
public function cekBensin() { ... }
}
Produk E-Commerce
Kita butuh class untuk merepresentasikan Produk di toko online.
Data: Nama, Harga, Stok.
Aksi: Beli (kurangi stok).
class Produk {
public $nama;
public $harga;
public $stok;
public function beli($jumlah) {
if ($this->stok >= $jumlah) {
$this->stok -= $jumlah;
echo "Berhasil membeli $jumlah $this->nama";
} else {
echo "Stok tidak cukup!";
}
}
}
$laptop = new Produk();
$laptop->nama = "MacBook Pro";
$laptop->harga = 20000000;
$laptop->stok = 10;
$laptop->beli(2); // Stok sisa 8
$laptop->beli(20); // Stok tidak cukup!
Kita bisa menentukan tipe data property agar lebih aman.
class User {
public string $name;
public int $age;
public bool $isActive;
}
Jika property bertipe data belum diisi, mengaksesnya akan menyebabkan Fatal Error.
$u = new User();
echo $u->name; // Error: Typed property must not be accessed before initialization
Gunakan tanda tanya ? jika property boleh kosong (null).
class User {
public ?string $address = null;
}
Class tanpa nama, biasanya untuk objek sekali pakai.
$logger = new class {
public function log($msg) { echo $msg; }
};
$logger->log("Hello");
== : True jika property sama.
=== : True jika merujuk ke instance yang SAMA PERSIS (memori sama).
$a = new Mobil(); $a->merk = "X";
$b = new Mobil(); $b->merk = "X";
$c = $a;
var_dump($a == $b); // true (Nilai sama)
var_dump($a === $b); // false (Beda objek)
var_dump($a === $c); // true (Objek sama)
Class kosong bawaan PHP. Berguna untuk membuat objek generik.
$obj = new stdClass();
$obj->nama = "Budi";
$arr = ['nama' => 'Budi', 'umur' => 20];
$obj = (object) $arr;
echo $obj->nama; // Budi
Satu file sebaiknya hanya berisi SATU Class.
Nama file harus sama dengan nama Class (`User.php` berisi `class User`).
$this = Objek saat ini.Produksi Selesai.