Home » PHP » OOP PHP : Kelas Abstrak – Kode dan Contohnya

OOP PHP : Kelas Abstrak – Kode dan Contohnya

by Hanifah Nurbaeti
by Hanifah Nurbaeti

PHP – Apa itu Kelas dan Metode Abstrak?

Kelas dan metode abstrak adalah ketika kelas induk memiliki metode bernama, tetapi membutuhkan kelas anaknya untuk mengisi tugas.

Kelas abstrak adalah kelas yang berisi setidaknya satu metode abstrak. Metode abstrak adalah metode yang dideklarasikan, tetapi tidak diimplementasikan dalam kode.

Kelas atau metode abstrak ditentukan dengan kata kunci abstract :

Sintaks

<?php
abstract class ParentClass {
  abstract public function someMethod1();
  abstract public function someMethod2($name, $color);
  abstract public function someMethod3() : string;
}
?>

Saat mewarisi dari kelas abstrak, metode kelas anak harus didefinisikan dengan nama yang sama dan pengubah akses yang sama atau kurang terbatas. Jadi, jika metode abstrak didefinisikan sebagai protected, metode kelas anak harus didefinisikan sebagai protected atau public, tetapi tidak private. Selain itu, jenis dan jumlah argumen yang diperlukan harus sama. Namun, kelas anak mungkin memiliki argumen opsional sebagai tambahan.

Jadi, ketika kelas anak diwarisi dari kelas abstrak, kita memiliki aturan berikut:

  • Metode kelas anak harus didefinisikan dengan nama yang sama dan mendeklarasikan ulang metode abstrak induk
  • Metode kelas anak harus ditentukan dengan pengubah akses yang sama atau kurang dibatasi
  • Jumlah argumen yang diperlukan harus sama. Namun, kelas anak mungkin memiliki argumen opsional sebagai tambahan

Mari kita lihat contohnya:

Contoh :

<?php
// Parent class
abstract class Car {
  public $name;
  public function __construct($name) {
    $this->name = $name;
  }
  abstract public function intro() : string;
}

// Child classes
class Audi extends Car {
  public function intro() : string {
    return "Pilih kualitas jerman! Mobil $this->name!";
  }
}

class Volvo extends Car {
  public function intro() : string {
    return "Bangga menjadi orang swedia! Mobil $this->name!";
  }
}

class Citroen extends Car {
  public function intro() : string {
    return "Perancis yang pemborosan! Mobil $this->name!";
  }
}

// Buat objek dari kelas anak
$audi = new audi("Audi");
echo $audi->intro();
echo "<br>";

$volvo = new volvo("Volvo");
echo $volvo->intro();
echo "<br>";

$citroen = new citroen("Citroen");
echo $citroen->intro();
?>
/*Output
Pilih kualitas Jerman! Saya seorang Audi!
Bangga menjadi orang Swedia! Saya seorang Volvo!
Pemborosan Prancis! Saya seorang Citroen!
*/

Penjelasan Kode

Kelas Audi, Volvo, dan Citroen diwarisi dari kelas Mobil. Hal ini berarti bahwa kelas Audi, Volvo, dan Citroen dapat menggunakan properti $name publik serta metode public __construct () dari kelas Mobil karena faktor pewarisan.

Tapi, intro() adalah metode abstrak yang harus didefinisikan di semua kelas anak dan mereka harus mengembalikan sebuah string.

PHP – Contoh Kelas Lebih Abstrak

Mari kita lihat contoh lain di mana metode abstrak memiliki argumen:

Contoh :

<?php
abstract class ParentClass {
  // Abstract method with an argument
  abstract protected function prefixName($name);
}

class ChildClass extends ParentClass {
  public function prefixName($name) {
    if ($name == "John Doe") {
      $prefix = "Mr.";
    } elseif ($name == "Jane Doe") {
      $prefix = "Mrs.";
    } else {
      $prefix = "";
    }
    return "{$prefix} {$name}";
  }
}

$class = new ChildClass;
echo $class->prefixName("John Doe");
echo "<br>";
echo $class->prefixName("Jane Doe");
?>
/*Output
Mr. John Doe
Mrs. Jane Doe
*/

Mari kita lihat contoh lain di mana metode abstrak memiliki argumen dan kelas anak memiliki dua argumen opsional yang tidak ditentukan dalam metode abstrak induknya:

Contoh :

<?php
abstract class ParentClass {
  // Metode abstrak dengan argumen
  abstract protected function prefixName($name);
}

class ChildClass extends ParentClass {
  // Kelas anak dapat mendefinisikan argumen opsional yang tidak ada dalam metode abstrak induknya
  public function prefixName($name, $separator = ".", $greet = "Dear") {
    if ($name == "John Doe") {
      $prefix = "Mr";
    } elseif ($name == "Jane Doe") {
      $prefix = "Mrs";
    } else {
      $prefix = "";
    }
    return "{$greet} {$prefix}{$separator} {$name}";
  }
}

$class = new ChildClass;
echo $class->prefixName("John Doe");
echo "<br>";
echo $class->prefixName("Jane Doe");
?>
  
  /*Output
  Dear Mr. John Doe
Dear Mrs. Jane Doe
  */

You may also like