PHP Abstract Class

The Blueprint of Object Oriented Programming

Oleh: Ahmad Muyassar, S.Kom.,M.Cs

Project Plan

01. Konsep Abstraksi
02. Abstract Class vs Concrete Class
03. Abstract Methods
04. Implementasi Turunan
05. Studi Kasus: Payment Gateway
01

Konsep Abstraksi

Menyembunyikan Detail, Menampilkan Fungsi

Analogi: Mobil

Mobil (Abstract)

Gas(), Rem(), Belok()

⬇️ Implementasi
Ferrari
Toyota

Pengemudi tidak perlu tahu cara kerja mesin pembakaran dalam. Mereka hanya perlu tahu cara menggunakan pedal gas dan rem.

Apa itu Abstraksi?

Abstraksi adalah proses menyembunyikan detail implementasi yang rumit dan hanya menampilkan fungsionalitas penting kepada pengguna.

Dalam OOP, kita menggunakan Abstract Class dan Interface untuk mencapai abstraksi.

02

Abstract Class

Cetak Biru Setengah Jadi

Definisi Abstract Class

Abstract Class adalah class yang tidak bisa diinstansiasi (tidak bisa dibuat object-nya secara langsung).

Ia berfungsi sebagai kerangka dasar (template) bagi class-class turunannya.

Syntax Dasar

Gunakan keyword abstract di depan definisi class.


abstract class Kendaraan {
    protected $warna;

    public function setWarna($warna) {
        $this->warna = $warna;
    }
}
            

Tidak Bisa Diinstansiasi


$mobil = new Kendaraan(); 
// Error: Cannot instantiate abstract class Kendaraan
            

Fatal Error!

Kapan Menggunakan Abstract Class?

03

Abstract Methods

Kontrak yang Wajib Ditepati

Apa itu Abstract Method?

Method yang hanya memiliki deklarasi (nama dan parameter) tetapi tidak memiliki body (implementasi).

Abstract method HANYA boleh ada di dalam Abstract Class.

Syntax Abstract Method


abstract class Kendaraan {
    // Abstract method: Tidak ada kurung kurawal {}
    abstract public function bergerak();
}
            

Aturan Main

Jika sebuah class memiliki minimal SATU abstract method, maka class tersebut WAJIB dideklarasikan sebagai abstract class.

04

Implementasi

Mewujudkan Cetak Biru

Concrete Class (Kelas Nyata)

Class turunan yang meng-extends abstract class disebut Concrete Class.

Concrete Class WAJIB mengimplementasikan (meng-override) SEMUA abstract method dari parent-nya.

Contoh Implementasi


class Mobil extends Kendaraan {
    public function bergerak() {
        echo "Mobil melaju dengan roda...";
    }
}

class Pesawat extends Kendaraan {
    public function bergerak() {
        echo "Pesawat terbang di udara...";
    }
}
            

Visibilitas Method

Saat mengimplementasikan abstract method, visibilitasnya harus sama atau lebih longgar.

Parameter Method

Jumlah dan tipe parameter wajib sama dengan deklarasi di abstract method.

Namun, child class boleh menambahkan parameter opsional (dengan default value).

05

Studi Kasus

Contoh Dunia Nyata

Kasus 1: Bangun Datar (Shape)

Kita ingin menghitung luas berbagai bentuk. Rumus luas setiap bentuk berbeda, tapi konsep "Luas" itu sama.

Abstract Class Shape


abstract class Shape {
    protected $color;
    
    public function __construct($color) {
        $this->color = $color;
    }
    
    // Setiap bentuk PASTI punya luas, tapi caranya beda
    abstract public function calculateArea();
    
    public function getColor() {
        return $this->color;
    }
}
            

Circle Implementation


class Circle extends Shape {
    private $radius;
    
    public function __construct($color, $radius) {
        parent::__construct($color);
        $this->radius = $radius;
    }
    
    public function calculateArea() {
        return pi() * pow($this->radius, 2);
    }
}
            

Rectangle Implementation


class Rectangle extends Shape {
    private $width;
    private $height;
    
    public function __construct($color, $width, $height) {
        parent::__construct($color);
        $this->width = $width;
        $this->height = $height;
    }
    
    public function calculateArea() {
        return $this->width * $this->height;
    }
}
            

Penggunaan Shape


$circle = new Circle('Red', 7);
echo $circle->calculateArea(); // 153.93...

$rect = new Rectangle('Blue', 5, 10);
echo $rect->calculateArea(); // 50
            

Kasus 2: Payment Gateway

Aplikasi e-commerce mendukung banyak metode pembayaran (PayPal, Stripe, Transfer Bank).

Abstract Payment


abstract class Payment {
    abstract public function process($amount);
    
    public function logTransaction($msg) {
        echo "Log: $msg";
    }
}
            

PayPal Implementation


class PayPalPayment extends Payment {
    public function process($amount) {
        // Logika koneksi ke API PayPal
        $this->logTransaction("Processing PayPal: $amount");
    }
}
            

Stripe Implementation


class StripePayment extends Payment {
    public function process($amount) {
        // Logika koneksi ke API Stripe
        $this->logTransaction("Processing Stripe: $amount");
    }
}
            

Polimorfisme

Dengan abstract class, kita bisa memperlakukan semua tipe pembayaran secara seragam.


function checkout(Payment $paymentMethod, $total) {
    $paymentMethod->process($total);
}

checkout(new PayPalPayment(), 100);
checkout(new StripePayment(), 200);
            
06

Abstract vs Interface

Perbedaan Mendasar

Tabel Perbandingan

Fitur Abstract Class Interface
Method Body Boleh ada (Concrete) Tidak boleh (sebelum PHP 8)
Properties Boleh punya variabel Hanya konstanta
Inheritance Single (extends) Multiple (implements)
Tujuan Share fungsionalitas umum Mendefinisikan kontrak

Tips Memilih

Kesimpulan

Terima Kasih

Blueprint Selesai.

1 / 35