PHP OOP - Kelas Abstrak
PHP - Apa itu Kelas dan Metode Abstrak?
Kelas dan metode abstrak adalah ketika kelas induk memiliki metode bernama, tetapi membutuhkan kelas turunannya 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 didefinisikan dengan abstract
kata kunci:
Sintaksis
<?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 dibatasi. Jadi, jika metode abstrak didefinisikan sebagai dilindungi, metode kelas anak harus didefinisikan sebagai dilindungi atau publik, tetapi tidak pribadi. Juga, 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, kami memiliki aturan berikut:
- Metode kelas anak harus didefinisikan dengan nama yang sama dan mendeklarasikan ulang metode abstrak induk
- Metode kelas anak harus didefinisikan dengan pengubah akses yang sama atau kurang terbatas
- Jumlah argumen yang diperlukan harus sama. Namun, kelas anak mungkin memiliki argumen opsional sebagai tambahan
Mari kita lihat sebuah contoh:
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 "Choose German
quality! I'm an $this->name!";
}
}
class
Volvo extends Car {
public
function intro() : string {
return "Proud to be
Swedish! I'm a $this->name!";
}
}
class
Citroen extends Car {
public
function intro() : string {
return "French
extravagance! I'm a $this->name!";
}
}
// Create objects from the child classes
$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();
?>
Contoh Dijelaskan
Kelas Audi, Volvo, dan Citroen diwarisi dari kelas Mobil. Ini berarti bahwa kelas Audi, Volvo, dan Citroen dapat menggunakan properti $name publik serta metode __construct() publik dari kelas Mobil karena pewarisan.
Tapi, intro() adalah metode abstrak yang harus didefinisikan di semua kelas anak dan mereka harus mengembalikan 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");
?>
Mari kita lihat contoh lain di mana metode abstrak memiliki argumen, dan kelas anak memiliki dua argumen opsional yang tidak didefinisikan dalam metode abstrak induknya:
Contoh
<?php
abstract class ParentClass {
// Abstract method
with an argument
abstract protected
function prefixName($name);
}
class ChildClass extends ParentClass {
// The child class may define optional arguments that are not in the parent's
abstract method
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");
?>