Metode Abstrak dalam OOP di PHP
Kelas abstrak juga dapat berisi metode abstrak. Metode seperti ini tidak boleh memiliki implementasi, dan diperlukan untuk menunjukkan bahwa metode tersebut harus ada pada kelas turunannya. Dan sebenarnya implementasi metode tersebut sudah menjadi tugas kelas turunannya.
Untuk mendeklarasikan sebuah metode sebagai abstrak,
pada deklarasinya harus ditulis kata kunci
abstract.
Mari kita coba dalam praktik. Misalkan diasumsikan,
bahwa semua kelas turunan dari kelas User harus
memiliki metode increaseRevenue.
Metode ini harus mengambil pendapatan pengguna saat ini dan meningkatkannya sejumlah nilai tertentu, yang diteruskan melalui parameter.
Kelas User itu sendiri tidak tahu, pendapatan seperti apa
yang akan diterima oleh kelas turunannya - karena bagi pekerja
ini adalah gaji, sedangkan bagi mahasiswa - ini adalah beasiswa. Oleh karena itu
setiap kelas turunan akan mengimplementasikan metode ini
dengan caranya sendiri.
Intinya di sini adalah bahwa metode abstrak dari kelas
User memaksa programmer untuk mengimplementasikan
metode ini dalam kelas turunannya, jika tidak PHP akan menampilkan error.
Dengan demikian Anda, atau programmer lain,
yang bekerja dengan kode Anda, tidak akan mungkin
lupa untuk mengimplementasikan metode yang diperlukan
pada kelas turunan.
Jadi, mari kita coba dalam praktik. Mari tambahkan
metode abstrak increaseRevenue
ke dalam kelas User:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
// Metode abstrak tanpa badan:
abstract public function increaseRevenue($value);
}
?>
Misalkan kelas Employee kita untuk sini dibiarkan
tanpa perubahan. Dalam hal ini, bahkan jika tidak
membuat objek dari kelas Employee,
tetapi hanya menjalankan kode yang mendefinisikan
kelas-kelas kita - PHP akan menampilkan error.
Sekarang mari kita tulis implementasi metode
increaseRevenue dalam kelas
Employee:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
// Tulis implementasi metode:
public function increaseRevenue($value)
{
$this->salary = $this->salary + $value;
}
}
?>
Mari kita periksa kerja kelas kita:
<?php
$employee = new Employee;
$employee->setName('john');
$employee->setSalary(1000);
$employee->increaseRevenue(100);
echo $employee->getSalary();
?>
Mari implementasikan metode increaseRevenue juga
dalam kelas Student. Hanya saja sekarang
metode kita akan meningkatkan beasiswa:
<?php
class Student extends User
{
private $scholarship; // beasiswa
public function getScholarship()
{
return $this->scholarship;
}
public function setScholarship($scholarship)
{
$this->scholarship = $scholarship;
}
// Metode meningkatkan beasiswa:
public function increaseRevenue($value)
{
$this->scholarship = $this->scholarship + $value;
}
}
?>
Tambahkan ke dalam kelas User Anda metode abstrak
increaseRevenue yang sama.
Tulis implementasi metode ini dalam kelas
Employee dan Student.
Dalam kelas Figure buatlah metode abstrak
untuk mendapatkan luas dan keliling bangun datar.