Abstraktās metodes OOP PHP
Abstraktajās klasēs var būt arī abstraktas metodes. Šādām metodēm nevajadzētu būt implementācijai, un tās ir nepieciešamas, lai norādītu, ka šādām metodēm jābūt mantiniekiem. Un pašu šo metožu implementācija jau ir mantinieku uzdevums.
Lai deklarētu metodi kā abstraktu,
tās deklarēšanas laikā jāraksta atslēgvārds
abstract.
Izmēģināsim praksē. Pieņemsim, ka
visām klases User mantiniecēm
jābūt metodei increaseRevenue.
Šai metodei jāpaņem pašreizējie lietotāja ienākumi un jāpalielina tos par noteiktu vērtību, kas nodota parametrā.
Pati klase User nezina, kādi tieši
ienākumi būs mantiniekam - jo darbiniekam
tā ir alga, bet studentam - stipendija. Tāpēc
katrs mantinieks implementēs šo metodi
savā veidā.
Būtība ir tāda, ka abstraktā klases
User metode liek programmētājam implementēt
šo metodi mantiniekos, pretējā gadījumā PHP izvadīs kļūdu.
Tādējādi jūs vai cits programmētājs,
kas strādā ar jūsu kodu, nekādā veidā nevarēs
aizmirst implementēt nepieciešamo metodi
mantiniekā.
Tātad, izmēģināsim praksē. Pievienosim
abstrakto metodi increaseRevenue
klasei User:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
// Abstraktā metode bez ķermeņa:
abstract public function increaseRevenue($value);
}
?>
Lai mūsu klase Employee pagaidām paliek
bez izmaiņām. Šajā gadījumā, pat ja neveido
klases Employee objektu,
bet vienkārši palaiž kodu, kurā tiek definētas
mūsu klases, - PHP izvadīs kļūdu.
Tagad uzrakstīsim metodes
increaseRevenue implementāciju klasē
Employee:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
// Uzrakstīsim metodes implementāciju:
public function increaseRevenue($value)
{
$this->salary = $this->salary + $value;
}
}
?>
Pārbaudīsim mūsu klases darbību:
<?php
$employee = new Employee;
$employee->setName('john');
$employee->setSalary(1000);
$employee->increaseRevenue(100);
echo $employee->getSalary();
?>
Implementēsim metodi increaseRevenue un
klasē Student. Tikai tagad mūsu
metode palielinās jau stipendiju:
<?php
class Student extends User
{
private $scholarship; // stipendija
public function getScholarship()
{
return $this->scholarship;
}
public function setScholarship($scholarship)
{
$this->scholarship = $scholarship;
}
// Metode palielina stipendiju:
public function increaseRevenue($value)
{
$this->scholarship = $this->scholarship + $value;
}
}
?>
Pievienojiet savai klasei User tādu pašu
abstrakto metodi increaseRevenue.
Uzrakstiet šīs metodes implementāciju klasēs
Employee un Student.
Klasē Figure izveidojiet abstraktas
metodes figūras laukuma un perimetra iegūšanai.