Memahami Object-Oriented Programming (OOP) pada PHP untuk Kode yang Terstruktur
Pada artikel sebelumnya, kita sudah belajar menulis kode PHP secara prosedural—yaitu menulis instruksi baris demi baris dari atas ke bawah. Cara ini sangat cocok untuk skrip sederhana. Namun, bagaimana jika aplikasi yang kamu bangun semakin besar dan memiliki puluhan ribu baris kode?
Jika tetap menggunakan gaya prosedural, kodemu berisiko menjadi "kode mi instan" (spaghetti code) yang berantakan, sulit dibaca, dan membingungkan saat ada bug.
Di sinilah Object-Oriented Programming (OOP) atau Pemrograman Berbasis Objek hadir sebagai penyelamat!
1. Apa Itu OOP dan Mengapa Kita Membutuhkannya?
OOP adalah paradigma pemrograman yang mengorganisasi kode berdasarkan objek, bukan sekadar urutan fungsi atau logika. Objek ini mencakup data (property) dan tindakan (method) yang saling berhubungan.
Analog Sederhana: Cetakan Kue
Bayangkan kamu ingin membuat 100 buah mobil mainan:
-
Class adalah cetakan/blueprint mobil.
-
Object adalah mobil nyata yang dihasilkan dari cetakan tersebut.
Dengan satu cetakan (Class), kamu bisa membuat puluhan mobil (Object) dengan warna atau fitur yang berbeda-beda tanpa perlu membuat cetakannya dari awal setiap kali ingin menambah mobil.
┌─────────────────────────┐
│ CLASS (Blueprint) │
│ - Property: $warna │
│ - Method: jalankan() │
└────────────┬────────────┘
│
│ (Instansiasi / new)
▼
┌───────────────────────┐ ┌───────────────────────┐
│ OBJECT 1 (Mobil A) │ │ OBJECT 2 (Mobil B) │
│ Warna: Merah │ │ Warna: Biru │
└───────────────────────┘ └───────────────────────┘
2. Empat Pilar Utama OOP dalam PHP
OOP memiliki 4 konsep dasar yang wajib kamu kuasai:
A. Class & Object
-
Class: Wadah yang mendefinisikan atribut dan perilaku.
-
Object: Bentuk nyata (realisasi) dari sebuah Class.
PHP
<?php
// Mendefinisikan Class
class Mobil {
// Property (Atribut/Data)
public $merk;
public $warna;
// Method (Perilaku/Fungsi)
public function jalankan() {
return "Mobil " . $this->merk . " berwarna " . $this->warna . " sedang berjalan!";
}
}
// Membuat Object dari Class Mobil
$mobilBudi = new Mobil();
$mobilBudi->merk = "Toyota";
$mobilBudi->warna = "Hitam";
echo $mobilBudi->jalankan();
// Output: Mobil Toyota berwarna Hitam sedang berjalan!
B. Encapsulation (Enkapsulasi / Pembungkusan)
Encapsulation adalah cara membungkus data agar tidak bisa diakses atau diubah secara sembarangan dari luar Class. Kita mengontrol akses ini menggunakan Visibility Modifiers:
-
public: Bisa diakses dari mana saja (di dalam maupun di luar Class). -
private: Hanya bisa diakses dari dalam Class itu sendiri. -
protected: Hanya bisa diakses dari dalam Class itu sendiri dan Class turunannya (inheritance).
PHP
<?php
class RekeningBank {
// Saldo dibuat private agar tidak bisa diubah langsung dari luar
private $saldo;
public function __construct($saldoAwal) {
$this->saldo = $saldoAwal;
}
// Method untuk menambah saldo secara aman
public function setorUang($jumlah) {
if ($jumlah > 0) {
$this->saldo += $jumlah;
}
}
// Method untuk mengecek saldo
public function getSaldo() {
return "Saldo Anda saat ini: Rp " . number_format($this->saldo, 0, ',', '.');
}
}
$akun = new RekeningBank(100000);
$akun->setorUang(50000);
echo $akun->getSaldo(); // Output: Saldo Anda saat ini: Rp 150.000
// $akun->saldo = 10000000; // ERROR! Tidak bisa mengubah langsung variabel private.
C. Inheritance (Pewarisan)
Inheritance memungkinkan sebuah Class anak (Child Class) mewarisi property dan method dari Class induk (Parent Class). Ini sangat berguna agar kamu tidak perlu menulis ulang kode yang sama (Don't Repeat Yourself / DRY).
Di PHP, pewarisan menggunakan kata kunci extends.
PHP
<?php
// Parent Class
class Pengguna {
public $nama;
public $email;
public function __construct($nama, $email) {
$this->nama = $nama;
$this->email = $email;
}
public function getInfo() {
return "Nama: $this->nama | Email: $this->email";
}
}
// Child Class (Mewarisi Pengguna)
class Admin extends Pengguna {
public function hapusPengguna($namaUser) {
return "Admin $this->nama telah menghapus akun $namaUser.";
}
}
// Membuat Object Admin
$admin1 = new Admin("Siti", "siti@admin.com");
// Admin1 secara otomatis punya method getInfo() milik Parent Class!
echo $admin1->getInfo();
echo "<br>";
echo $admin1->hapusPengguna("Budi");
D. Polymorphism (Polimorfisme / Banyak Bentuk)
Polymorphism memungkinkan Class turunan untuk memberikan implementasi yang berbeda pada method yang namanya sama dari Parent Class.
PHP
<?php
abstract class Hewan {
// Semua hewan punya kemampuan bersuara, tapi suaranya beda-beda
abstract public function bersuara();
}
class Kucing extends Hewan {
public function bersuara() {
return "Meow!";
}
}
class Anjing extends Hewan {
public function bersuara() {
return "Guk Guk!";
}
}
$pet1 = new Kucing();
$pet2 = new Anjing();
echo $pet1->bersuara(); // Output: Meow!
echo $pet2->bersuara(); // Output: Guk Guk!
3. Keuntungan Menggunakan OOP di PHP
Mengapa pengembang PHP profesional selalu menggunakan OOP?
-
Reusability (Kode Bisa Dipakai Ulang): Kamu bisa menggunakan Class yang sama di berbagai bagian aplikasi tanpa menulis ulang.
-
Mudah Dirawat (Maintainable): Jika terjadi bug pada fitur tertentu, kamu cukup memperbaiki Class yang bersangkutan tanpa merusak bagian aplikasi lainnya.
-
Standar Industri & Framework: Framework raksasa seperti Laravel, Symfony, dan CodeIgniter dibangun 100% menggunakan OOP. Menguasai OOP adalah syarat mutlak jika ingin mahir menggunakan framework tersebut.
Kesimpulan
OOP bukan sekadar cara menulis sintaks baru, melainkan pola pikir (mindset) dalam merancang perangkat lunak. Dengan membagi aplikasi menjadi objek-objek kecil yang terstruktur, kodemu akan jauh lebih rapi, aman, dan siap dikembangkan ke skala yang lebih besar.




