Pada PHP 5 kita mengenal class abstrak dan method abstrak. Class abstrak (abstract class) didefinisikan sebagai class yang tidak bisa diinstantisasi menjadi object. Sebuah class abstrak setidaknya memiliki satu method abstrak (abstract method). Untuk menggunakan sebuah class abstrak, kita harus membuat class turunan dari class abstrak tersebut.
Tujuan dari dibuat abstrak class adalah agar setiap class turunan menggunakan method abstrak pada class induk secara fleksibel. Jadi pada method abstrak di class induk hanya terdapat signature saja tanpa isi yang konkrit.
Membuat Class Abstrak
Untuk membuat class abstrak, kita menggunakan keyword “abstract” didepan keyword class. Sebuah class abstrak harus memiliki setidaknya satu method abstrak. Namun class abstrak juga bisa memiliki properti dan method normal layaknya class konkrit.
abstract class AbstractClass {
....//harus berisi setidaknya satu method abstrak
}
Membuat Method Abstrak
Untuk membuat method abstrak, kita menggunakan keyword “abstract” didepan keyword function. Jika didefinisikan hak akses-nya seperti public, private dan protected maka kita menempatkan keyword abstract tadi didepan hak akses, misal abstract public function namaFunction().
abstract class AbstractClass {
// membuat method abstrak didalam class abstrak
abstract protected function abstractMethod();
}
Yang unik dalam membuat method abstrak ini adalah kita tidak perlu membuat isi method, karena memang method ini abstrak alias tidak nyata. Kita baru akan mengisi method nanti didalam class turunan. Jadi kita hanya bisa membuat method abstrak ini didalam class induk saja.
Penggunaan Class Abstrak dan Method Abstrak
Dalam penggunaan class abstrak dan method abstrak, kita harus memperhatikan beberapa hal penting yang jika tidak dipenuhi akan berakibat error dan program tidak jalan. Hal-hal tersebut diantaranya adalah sebagai berikut :
1. Class Abstrak tidak bisa diinstatisasi
Sebuah class abstrak tidak bisa langsung diinstantisasi menjadi object. Class Abstrak hanya bisa diinstantisasi menjadi object melalui class turunan. Jadi class sbstrak hanya merupakan bluprint dari class turunan.
Contoh berikut ini akan menghasilkoan error ” Fatal error: Cannot instantiate abstract class” jika dieksekusi :
<?php
abstract class Rumus {
abstract public function luas_lingkaran();
}
$rumus=new Rumus();
?>
2. Class turunan harus mengimplementasi semua method abstrak pada class induk.
Ketika kita membuat class turunan dari class induk yang abstrak, maka kita harus mengimplementasi semua method abstrak yang ada pada class tersebut. Jika ada satu saja method abstrak yang tidak diimplementasi akan muncul error.
Contoh berikut ini akan menghasilkan error ” Fatal error: Class … contains 1 abstract method and must therefore be declared abstract or implement the remaining methods ” jika dieksekusi :
<?php
abstract class Rumus {
abstract public function luas_lingkaran();
abstract public function luas_persegi();
}
class Luas extends Rumus {
public function luas_lingkaran() {
return "Ini method luas lingkaran";
}
}
$luas=new Luas();
echo $luas->luas_lingkaran();
?>
3. Class abstrak bisa memiliki properti, method dan static
Dalam class abstrak kita bisa membuat properti, method dan static seperti layaknya class konkrit. Untuk lebih jelas perhatikan contoh berikut ini :
<?php
abstract class Rumus {
var $diameter;
public function jari () {
return $this->diameter / 2;
}
public static $pi=3.14;
abstract public function luas_lingkaran();
}
class Luas extends Rumus {
public function luas_lingkaran() {
return parent::$pi * $this->jari() * $this->jari();
}
}
$luas=new Luas();
$luas->diameter = 10;
echo "Luas Lingkaran dengan diameter ".$luas->diameter." = ".$luas->luas_lingkaran();
?>
Pada script diatas terdapat sebuah class abstrak Rumus yang memiliki sebuah method abstrak luas_lingkaran() tanpa isi. Kemudian class abstrak Rumus juga properti $diameter, sebuah method jari() dan sebuah static $pi.
Selanjutnya class abstrak dicetak pada class turunan Luas dan method abstraknya diimplementasi pada class tersebut sehingga syarat pada item no.2 diatas telah terpenuhi. Pada method luas_lingkaran() di class turunan kita mengakses static $pi dan method jari() pada class induk untuk menghitung luas lingkaran.
Dan untuk melihat hasilnya kita instantisasi class Luas menjadi object, kemudian kita set nilai diameternya=10 dan kita tampilkan hasil perhitungan dari method luas_lingkaran().
Jika benar maka script diatas akan menghasilkan tampilan :
Luas Lingkaran dengan diameter 10 = 78.5
Referensi :