PHP - Kelas Abstrak

Selamat datang dalam perjalanan kami ke dunia pemrograman PHP! Hari ini, kita akan mendalamkan salah satu fitur paling kuat dari PHP: kelas abstrak. Tetapi sebelum kita memulai, izinkan saya ceritakan sedikit tentang bagaimana saya pertama kali belajar tentang 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 memiliki ide bagus untuk membuat permainan petualangan berbasis teks, tapi dia perlu membangun beberapa struktur dasar terlebih dahulu. Itulah saat dia menemukan kelas abstrak.

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

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

Contoh

Mari kita mulai dengan contoh sederhana untuk memahami konsep kelas abstrak. Kita akan membuat kelas abstrak yang dinamai Animal dan kemudian diperpanjang 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 constructor dan metode makeSound() yang perlu diimplementasikan oleh setiap kelas yang mewarisi Animal. Metode getName() adalah metode konkrit, artinya itu memiliki implementasi dan dapat digunakan langsung oleh instansi kelas.

Kelas Dog dan Cat mewarisi kelas Animal dan menyediakan implementasi mereka sendiri dari metode makeSound(). Ketika kita membuat instansi 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 bagi kelas, tetapi mereka memiliki beberapa perbedaan kunci:

  1. Implementasi: Sebuah interface hanya dapat mengandung metode abstrak (metode tanpa implementasi), sedangkan kelas abstrak dapat mengandung baik metode abstrak dan konkrit. Ini berarti jika Anda perlu menyediakan perilaku default dalam hierarki kelas Anda, Anda harus 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 bagi kelas, yang dapat menyebabkan kesulitan dalam pengelolaan state bersama dan penyelesaian metode.

  3. Properti: Interface tidak dapat mengandung properti, sedangkan kelas abstrak dapat. Ini berarti jika Anda perlu mendefinisikan properti bersama di banyak kelas, Anda harus menggunakan kelas abstrak.

  4. Visibilitas Metode: Dalam interface, semua metode secara implisit adalah umum. Dalam kelas abstrak, Anda dapat mendefinisikan metode dengan berbagai tingkat visibilitas (umum, terperlindung, atau pribadi).

  5. Constructor: Interface tidak dapat mengandung constructor, karena mereka dimaksudkan untuk mendefinisikan perilaku daripada menginstansiasi objek. Kelas abstrak dapat memiliki constructor, memungkinkan Anda untuk menginisialisasi properti bersama atau melakukan tugas pengaturan saat membuat instansi kelas turunan.

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

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

Credits: Image by storyset