BAB 13: Pemrograman Berorientasi Objek (OOP) Dasar – Membuat Kode PHP Lebih Terstruktur

BAB 13: Pemrograman Berorientasi Objek (OOP) Dasar – Membuat Kode PHP Lebih Terstruktur

OOP memungkinkan Anda menulis kode PHP yang lebih modular, reusable, dan mudah dipelihara. Di bab ini, kita akan mempelajari konsep dasar OOP: kelas, objek, properti, metode, dan pewarisan.


Class dan Object

  • Class adalah blueprint atau cetak biru untuk membuat objek.
  • Object adalah instansi nyata dari class.
<?php
class Mobil {
    public $merk;
    public $warna;
}

// Membuat objek
$mobil1 = new Mobil();
$mobil1->merk = "Toyota";
$mobil1->warna = "Merah";

echo $mobil1->merk; // Output: Toyota
?>

Properti dan Metode

  • Properti: variabel dalam class.
  • Metode: fungsi dalam class.
<?php
class Mobil {
    public $merk;

    public function jalan() {
        echo $this->merk . " sedang berjalan.";
    }
}

$mobil1 = new Mobil();
$mobil1->merk = "Honda";
$mobil1->jalan(); // Output: Honda sedang berjalan.
?>

$this digunakan untuk mengakses properti dan metode dari objek saat ini.


Constructor dan Destructor

1. Constructor

Dijalankan saat objek dibuat, biasanya untuk inisialisasi properti.

<?php
class Mobil {
    public $merk;

    public function __construct($merk) {
        $this->merk = $merk;
    }
}

$mobil1 = new Mobil("Suzuki");
echo $mobil1->merk; // Output: Suzuki
?>

2. Destructor

Dijalankan saat objek dihancurkan atau skrip selesai.

<?php
class Mobil {
    public function __destruct() {
        echo "Objek Mobil dihancurkan.";
    }
}

$mobil1 = new Mobil();
?>

Inheritance (Pewarisan)

Pewarisan memungkinkan class turunan mewarisi properti dan metode dari class induk.

<?php
class Kendaraan {
    public $merk;
    public function info() {
        echo "Ini kendaraan merk $this->merk";
    }
}

class Mobil extends Kendaraan {
    public $jumlahPintu;
}

$mobil = new Mobil();
$mobil->merk = "Toyota";
$mobil->jumlahPintu = 4;
$mobil->info(); // Output: Ini kendaraan merk Toyota
?>

Visibility: public, private, protected

  • public → bisa diakses dari mana saja
  • private → hanya bisa diakses di dalam class
  • protected → bisa diakses di class dan subclass
<?php
class Mobil {
    public $merk;
    private $harga;

    public function setHarga($harga) {
        $this->harga = $harga;
    }

    public function getHarga() {
        return $this->harga;
    }
}

$mobil = new Mobil();
$mobil->merk = "Honda";
// $mobil->harga = 50000; // Error, private
$mobil->setHarga(50000);
echo $mobil->getHarga(); // Output: 50000
?>

Static Properties & Methods

  • Static tidak memerlukan objek untuk diakses.
  • Cocok untuk fungsi atau data yang berlaku untuk semua objek.
<?php
class MathHelper {
    public static $pi = 3.14;

    public static function luasLingkaran($r) {
        return self::$pi * $r * $r;
    }
}

echo MathHelper::$pi; // Output: 3.14
echo MathHelper::luasLingkaran(5); // Output: 78.5
?>

Namespace dan Autoloading Dasar

1. Namespace

Digunakan untuk menghindari konflik nama class.

<?php
namespace App\Models;

class User {
    public $nama;
}
?>

2. Autoloading

PHP dapat memuat class secara otomatis menggunakan spl_autoload_register().

<?php
spl_autoload_register(function ($class) {
    include $class . ".php";
});

$user = new App\Models\User();
?>

Dengan OOP dan namespace, kode menjadi lebih terstruktur, modular, dan mudah digunakan kembali.