Kaedah Abstrak dalam OOP dalam PHP
Kelas abstrak juga boleh mengandungi kaedah abstrak. Kaedah sedemikian tidak sepatutnya mempunyai pelaksanaan, tetapi diperlukan untuk menunjukkan bahawa kaedah sedemikian mesti ada pada keturunan. Dan sebenarnya pelaksanaan kaedah tersebut - sudah menjadi tugas keturunan.
Untuk mengisytiharkan kaedah sebagai abstrak,
apabila mengisytiharkannya, tulis kata kunci
abstract.
Mari cuba dalam praktik. Katakan diandaikan
bahawa semua keturunan kelas User harus
mempunyai kaedah increaseRevenue.
Kaedah ini harus mengambil pendapatan semasa pengguna dan menambahnya dengan sejumlah nilai, yang dihantar sebagai parameter.
Kelas User sendiri tidak tahu, pendapatan apa
yang akan diterima oleh pewaris - kerana bagi pekerja
ia adalah gaji, manakala bagi pelajar - biasiswa. Oleh itu
setiap keturunan akan melaksanakan kaedah ini
dengan caranya sendiri.
Intinya di sini ialah kaedah abstrak kelas
User memaksa pengaturcara untuk melaksanakan
kaedah ini dalam keturunan, jika tidak PHP akan memaparkan ralat.
Dengan cara ini anda, atau pengaturcara lain,
yang bekerja dengan kod anda, tidak akan dapat
lupa untuk melaksanakan kaedah yang diperlukan
dalam keturunan.
Jadi, mari cuba dalam praktik. Mari tambahkan
kaedah 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;
}
// Kaedah abstrak tanpa badan:
abstract public function increaseRevenue($value);
}
?>
Biarkan kelas Employee kita buat sementara ini
kekal tanpa perubahan. Dalam kes ini, walaupun tidak
mewujudkan objek kelas Employee,
tetapi hanya menjalankan kod di mana kelas-kelas kita
ditetapkan, - PHP akan memaparkan ralat.
Sekarang mari kita tulis pelaksanaan kaedah
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 pelaksanaan kaedah:
public function increaseRevenue($value)
{
$this->salary = $this->salary + $value;
}
}
?>
Mari semak kerja kelas kami:
<?php
$employee = new Employee;
$employee->setName('john');
$employee->setSalary(1000);
$employee->increaseRevenue(100);
echo $employee->getSalary();
?>
Mari laksanakan kaedah increaseRevenue dan
dalam kelas Student. Hanya sekarang
kaedah kami akan menambah biasiswa:
<?php
class Student extends User
{
private $scholarship; // biasiswa
public function getScholarship()
{
return $this->scholarship;
}
public function setScholarship($scholarship)
{
$this->scholarship = $scholarship;
}
// Kaedah menambah biasiswa:
public function increaseRevenue($value)
{
$this->scholarship = $this->scholarship + $value;
}
}
?>
Tambahkan ke dalam kelas User anda
kaedah abstrak yang sama increaseRevenue.
Tulis pelaksanaan kaedah ini dalam kelas
Employee dan Student.
Dalam kelas Figure, buat kaedah abstrak
untuk mendapatkan luas dan perimeter rajah.