Memahami Penggunaan Class Abstract Pada PHP

Published on
-
3 mins read
Authors

Abstract Class

Abstract Class terkadang hanya sebagian diimplementasikan pada penggunaanya. Setidaknya satu method abstrak, yang merupakan method tanpa kode aktual di dalamnya — hanya sebuah nama dan parameternya, dan telah ditandai sebagai "abstract".

Method abstrak hanyalah sebuah definisi fungsi yang berfungsi untuk memberi tahu kita bahwa metode tersebut harus diimplementasikan dalam kelas turunan ( child class ). Contoh kode

Brew.php
<?php
abstract class Brew
{
abstract protected function make();
protected function addWater()
{
return $this->make();
}
protected function addSugar()
{
return $this->make();
}
}

Dan pertanyaanya sekarang adalah, bagaimana kita tahun bahwa suatu method/function yang telah kita buat itu akan dibutuhkan dan harus diimplementasikan?

Lihat kode yang ada dibawah ini yaitu kita coba membuat class bernama Tea, yang di dalamnya terdapat beberapa method untuk membuat sebuah teh.

Tea.php
<?php
class Tea
{
public function addTea()
{
var_dump("Dip a tea");
return $this;
}
public function addWater()
{
var_dump("Pour a water");
return $this;
}
public function addSugar()
{
var_dump("Add proper amount of sugar");
return $this;
}
public function make()
{
return $this
->addTea()
->addWater()
->addSugar();
}
}
$tea = new Tea();
$tea->make();

Sekarang kita coba membuat class baru juga bernama Coffee

Coffee.php
<?php
class Coffee
{
public function addCoffee()
{
var_dump("Add amount of coffee");
return $this;
}
public function addWater()
{
var_dump("Pour a water");
return $this;
}
public function addSugar()
{
var_dump("Add proper amount of sugar");
return $this;
}
public function make()
{
return $this
->addCoffee()
->addWater()
->addSugar();
}
}
$coffe = new Coffee();
$coffe->make();

Oke, kita coba perhatikan di dalam dua class di atas, yaitu Tea dan Coffee. Terdapat beberapa method yang sama seperti addWater dan addSugar.

Dalam kasus ini, kita bisa mengimplementasikan sebuah abstract class agar tidak terjadi duplikasi kode yang sudah kita tulis, dan pastinya kode akan terlihat lebih bersih ( clean ). Kita bisa melakukannya sebagai berikut

BrewingDrink.php
<?php
abstract class Brew
{
protected abstract function seasoning();
public function make()
{
return $this
->seasoning()
->addWater()
->addSugar();
}
public function addWater()
{
var_dump("Pour a water");
return $this;
}
public function addSugar()
{
var_dump("Add proper amount of sugar");
return $this;
}
}
class Tea extends Brew
{
public function seasoning()
{
var_dump("Dip a tea");
return $this;
}
}
$tea = new Tea();
$tea->make();
class Coffee extends Brew
{
public function seasoning()
{
var_dump("Add amount of coffee");
return $this;
}
}
$coffee = new Coffee();
$coffee->make();

Kita membuat abstract class dan menamainya Brew Di dalam abstract class ini, kita mendeklarasikan beberapa method yang sama digunakan pada class Tea dan Coffee kemudian kita membuat sebuah abstract method dengan nama seasoning.

Sekarang, jika kita membuat class Tea extend class Brew, kita akan mendapatkan tiga method yang ditentukan dan kita harus mendefinisikan method seasoning. Begitu juga dengan class Coffee, dapat dilakukan dengan cara yang sama.

Sekian dan Semoga bermanfaat. Sampai Jumpa.