PHP - Kelas Abstrak

Selamat datang dalam perjalanan kami ke dunia pemrograman PHP! Hari ini, kita akan mendalamkan salah satu fitur paling kuat di PHP: kelas abstrak. Tetapi sebelum kita memulai, izinkan saya ceritakan sedikit tentang bagaimana saya pertama kali mengetahui kelas abstrak.

PHP - Abstract Classes

Pada suatu waktu, di kota kecil yang dinamai "Codeville," ada seorang pemrogram muda bernama Alice yang ingin membuat sebuah permainan. Dia punya ide bagus untuk membuat permainan petualangan berbasis teks, tapi dia butuh membangun beberapa struktur dasar pertama. Itulah saat dia menemukan kelas abstrak.

Alice sangat senang karena kelas abstrak memungkinkannya mendefinisikan perilaku dan properti umum yang dimiliki oleh semua karakter di permainannya. Dia kemudian dapat membuat kelas karakter khusus yang mewarisi dari kelas-kelas abstrak ini, sehingga setiap karakter memiliki atribut dan metode yang diperlukan tanpa harus menulis mereka dari awal.

Sekarang, kembali ke panduan kami. Dalam PHP, kelas abstrak adalah kelas yang tidak dapat diinstansiasi dan dimaksudkan untuk diperpanjang oleh kelas lain. Itu bisa berisi baik metode abstrak (metode yang dideklarasikan tanpa implementasi) maupun metode konkrit (metode dengan implementasi).

Contoh

mari mulai dengan contoh sederhana untuk memahami konsep kelas abstrak. Kita akan membuat kelas abstrak yang dinamai Animal dan kemudian perpanjangnya untuk membuat dua kelas hewan khusus: Dog dan Cat.

abstract class Animal {
protected $name;

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

abstract public function makeSound();

public function getName() {
return $this->name;
}
}

class Dog extends Animal {
public function makeSound() {
return "Woof!";
}
}

class Cat extends Animal {
public function makeSound() {
return "Meow!";
}
}

$dog = new Dog("Buddy");
echo $dog->getName() . " says: " . $dog->makeSound() . "\n"; // Output: Buddy says: Woof!

$cat = new Cat("Whiskers");
echo $cat->getName() . " says: " . $cat->makeSound() . "\n"; // Output: Whiskers says: Meow!

Dalam contoh ini, kita memiliki kelas abstrak Animal dengan konstruktor dan metode makeSound() yang harus diimplementasikan oleh setiap kelas yang mewarisi Animal. Metode getName() adalah metode konkrit, artinya itu memiliki implementasi dan dapat digunakan langsung oleh instance kelas.

Kelas Dog dan Cat mewarisi kelas Animal dan menyediakan implementasi mereka sendiri dari metode makeSound(). Ketika kita membuat instance Dog dan Cat, kita dapat memanggil metode makeSound(), yang akan mengeluarkan suara yang sesuai untuk setiap hewan.

Perbedaan antara Interface dan Kelas Abstrak di PHP

Sekarang Anda telah melihat bagaimana kelas abstrak bekerja, mari kita bandingkan secara singkat mereka dengan interface. Baik interface maupun kelas abstrak digunakan untuk mendefinisikan kontrak untuk kelas, tetapi mereka memiliki beberapa perbedaan kunci:

  1. Implementasi: Sebuah interface hanya dapat berisi metode abstrak (metode tanpa implementasi), sedangkan kelas abstrak dapat berisi baik metode abstrak maupun metode konkrit. Ini berarti jika Anda perlu menyediakan perilaku default dalam hierarki kelas Anda, Anda sebaiknya menggunakan kelas abstrak. Jika Anda hanya ingin mendefinisikan kontrak tanpa perilaku default, gunakan interface.

  2. Pewarisan Ganda: Sebuah kelas dapat mengimplementasikan banyak interface, tetapi hanya dapat mewarisi satu kelas abstrak. Hal ini karena PHP tidak mendukung pewarisan ganda untuk kelas, yang dapat menyebabkan kesulitan dalam pengelolaan keadaan bersama dan penyelesaian metode.

  3. Properti: Interface tidak dapat berisi properti, sedangkan kelas abstrak dapat. Ini berarti jika Anda perlu mendefinisikan properti bersama diantara banyak kelas, Anda sebaiknya menggunakan kelas abstrak.

  4. Visibilitas Metode: Dalam interface, semua metode secara implisit adalah public. Dalam kelas abstrak, Anda dapat mendefinisikan metode dengan tingkat visibilitas berbeda (public, protected, atau private).

  5. Konstruktor: Interface tidak dapat berisi konstruktor, karena mereka dimaksudkan untuk mendefinisikan perilaku daripada menginstansiasi objek. Kelas abstrak dapat memiliki konstruktor, memungkinkan Anda untuk menginisialisasi properti bersama atau melakukan tugas setup saat membuat instance kelas turunan.

Ingat, pilihan antara menggunakan interface atau kelas abstrak tergantung pada kebutuhan khusus dan tujuan desain Anda. Jika Anda perlu menegakkan kontrak ketat dan memastikan bahwa semua kelas yang mengimplementasikan mengikuti sebuah set metode tertentu, gunakan interface. Jika Anda perlu menyediakan perilaku default atau properti bersama diantara banyak kelas, gunakan kelas abstrak.

Itulah untuk pengenalan kita tentang kelas abstrak di PHP! Saya harap panduan ini memberikan Anda pemahaman yang baik tentang bagaimana mereka bekerja dan bagaimana menggunakannya dalam kode Anda sendiri. Ingat, praktik membuat sempurna, jadi terus mengoding dan mencoba kelas abstrak untuk menjadi lebih nyaman dengan mereka. Selamat coding!

Credits: Image by storyset