PHP Abstract Class dan PHP Abstract Function

PHP Abstract Class dan PHP Abstract Function

Apa itu Class dan Fungsi Abstract

Class abstract adalah sebuah class yang tidak dapat dibuatkan objectnya secara langsung, namun digunakan sebagai kerangka dasar untuk class-class turunannya. Tujuan dari class abstract adalah untuk memastikan bahwa class-class turunannya memiliki fungsi-fungsi dan properti-properti yang sama dan sesuai dengan tujuan umum dari class abstract.

Fungsi abstract adalah fungsi yang tidak memiliki implementasi di dalam class abstract itu sendiri, tetapi harus diimplementasikan di class-class turunan yang mewarisi class abstract tersebut.

Dengan menggunakan class dan fungsi abstract, pemrogram dapat membuat kode yang lebih efisien dan mudah dimengerti, karena mereka hanya perlu menentukan implementasi khusus di class-class turunan, tanpa perlu menulis kode yang sama berkali-kali.

Class atau fungsi abstract didefinisikan dengan kata kunci abstract:

Sintaks

<?php
abstract class ClassKeluarga {
  abstract public function someMethod1();
  abstract public function someMethod2($nama, $warna);
  abstract public function someMethod3() : string;
}
?>

Saat mewarisi dari class abstract, fungsi pada class anak harus didefinisikan dengan nama yang sama, dan akses yang sama atau yang lebih rendah pembatasannya. Jadi, jika fungsi abstract didefinisikan sebagai protected, fungsi class anak harus didefinisikan sebagai protected atau public, tetapi tidak bisa menjadi private. Selain itu, jenis dan jumlah argumen yang diperlukan harus sama. Namun, class anak mungkin memiliki argumen opsional sebagai tambahan.

Jadi, ketika class anak diturunkan dari class abstract, maka akan memiliki aturan berikut:

  • Fungsi class anak harus didefinisikan dengan nama yang sama dan mendeklarasikan ulang fungsi abstract induk
  • Fungsi class anak harus ditentukan dengan pengubah akses yang sama atau tidak terlalu dibatasi
  • Jumlah argumen yang diperlukan harus sama. Namun, class anak mungkin memiliki argumen opsional sebagai tambahan

Mari kita lihat sebuah contoh:

Contoh

<!DOCTYPE html>
<html>
<body>

<?php
// class induk
abstract class Mobil {
  public $nama;
  public function __construct($nama) {
    $this->nama = $nama;
  }
abstract public function intro (): string;
}

// Class anak
class Audi extends Mobil {
  public function intro (): string {
    return "Pilih kualitas Jerman! Saya adalah $this->nama!";
  }
}

class Volvo extends Mobil {
  public function intro (): string {
    return "Bangga menjadi orang Swedia! Saya adalah $this->nama!";
  }
}

class Citroen extends Mobil {
  public function intro (): string {
    return "Pemborosan Perancis! Saya adalah $this->nama!";
  }
}

// Buat objek dari class 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();
?>

</body>
</html>

Penjelasan Contoh

Class Audi, Volvo, dan Citroen diwariskan dari class Mobil. Artinya, class Audi, Volvo, dan Citroen dapat menggunakan properti public $nama serta fungsi __construct() dari class Mobil karena pewarisan.

Namun, intro() adalah fungsi abstract yang harus didefinisikan di semua class anak dan mereka harus mengembalikan sebuah string.

Contoh Class Abstract Lainnya

Mari kita lihat contoh lain di mana fungsi abstract memiliki argumen:

Contoh

<!DOCTYPE html>
<html>
<body>

<?php
abstract class ClassKeluarga {
  // Fungsi abstract dengan argumen
  abstract protected function awalanNama($nama);
}

class ClassAnak extends ClassKeluarga {
  public function awalanNama($nama) {
    if ($nama == "John Doe") {
      $awalan = "Tn. ";
    } elseif ($nama == "Jane Doe") {
      $awalan = "Ny.";
    } else {
      $awalan = "";
    }
    return "{$awalan} {$nama}";
  }
}

$class = new ClassAnak;
echo $class->awalanNama("John Doe");
echo "<br>";
echo $class->awalanNama("Jane Doe");
?>

</body>
</html>

Mari kita lihat contoh lain di mana fungsi abstract memiliki argumen, dan class anak memiliki dua argumen opsional yang tidak ditentukan dalam fungsi abstract induk:

Contoh

<!DOCTYPE html>
<html>
<body>

<?php
abstract class ClassKeluarga {
  // Fungsi abstract dengan argumen
  abstract protected function awalanNama($nama);
}

class ClassAnak extends ClassKeluarga {
  // class anak dapat menentukan argumen opsional yang tidak ada dalam fungsi abstract induk
  public function awalanNama($nama, $separator = ".", $greet = "Yang Terhormat") {
    if ($nama == "John Doe") {
      $awalan = "Tn";
    } elseif ($nama == "Jane Doe") {
      $awalan = "Ny";
    } else {
      $awalan = "";
    }
    return "{$greet} {$awalan}{$separator} {$nama}";
  }
}

$class = new ClassAnak ;
echo $class->awalanNama("John Doe");
echo "<br>";
echo $class->awalanNama("Jane Doe");
?>

</body>
</html>

Tinggalkan Balasan

Keranjang Belanja0
Keranjang belanja kosong ...
0