PHP-dä OOP-da Abstrakt Metodlar
Abstrakt klasslar hem-de abstrakt metodlary öz içine alyp biler. Şeýle metodlaryň doly amala aşyrylyşy bolmaly däl, olaryň maksady şondan ybarat: şol metodlaryň nesillerde bolmalydygyny görkezmek. Hakyky şol metodlary amala aşyrmak - bolsa nesilleriň wezipesi.
Metody abstrakt hökmünde kesgitlemek üçin,
ony kesgitläňizde abstract açar sözüni ýazmaly.
Geliň amaly ýörelgä synanyşaly. Görkezeliň, User klassyňyzň ähli nesilleri
increaseRevenue metodyna eýe bolmaly.
Bu metod ulanyjynyň häzirki girdejisini almaly we ony parametr hökmünde geçirilen belli bir baha köpeltmeli.
User klassyň özi, nesiliň nähili girdeji aljakdygyny
bilmeýär - işgäriňki iş haky, talybyňky bolsa stipendiýa. Şonuň üçin
her bir nesil bu metody özüniň usuly bilen amala aşyrar.
Bu ýerde esasy mesele şonda:
User klassyň abstrakt metodi programmistleri bu metodu
nesillerde amala aşyrmaga mejbur edýär, ýogsam PHP ýalňyşlyk bildirer.
Şeýlelik bilen siz, ýa-da siziň kodyňyz bilen işleýän beýleki programmist,
nesilde gerekli metodi amala aşyrmagy hemişelik ýatdan çykaryp bilmersiňiz.
Bolýarso, geliň amaly ýörelgä synanyşaly. User
klassyňyz üçin increaseRevenue
abstrakt metoduny goşalyň:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
// Bedeni ýok abstrakt metod:
abstract public function increaseRevenue($value);
}
?>
Görkezeliň, bizim Employee klassyňyz häzirki wagtda üýtgeşikliksiz galar.
Bu ýagdaýda, hat-da Employee klassyňyz üçin obýekt döredilmese,
ýöne klassyňyz kesgitlenýän kody işletseňiz hem
- PHP ýalňyşlyk bildirer.
Indi geliň Employee
klassyňyz üçin increaseRevenue metoduny amala aşyryşyny ýazalyň:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
// Metody amala aşyryşyny ýazalyň:
public function increaseRevenue($value)
{
$this->salary = $this->salary + $value;
}
}
?>
Kodumyzyň işleýşini barlalyň:
<?php
$employee = new Employee;
$employee->setName('john');
$employee->setSalary(1000);
$employee->increaseRevenue(100);
echo $employee->getSalary();
?>
Geliň increaseRevenue metoduny hem-de
Student klassyňyz üçin amala aşyralyň. Indi bizim
metodymyz stipendiýany köpelder:
<?php
class Student extends User
{
private $scholarship; // stipendiýa
public function getScholarship()
{
return $this->scholarship;
}
public function setScholarship($scholarship)
{
$this->scholarship = $scholarship;
}
// Metod stipendiýany köpeldýär:
public function increaseRevenue($value)
{
$this->scholarship = $this->scholarship + $value;
}
}
?>
User klassyňyza şol bir
abstrakt increaseRevenue metodyny goşuň.
Bu metod üçin amala aşyryşy
Employee we Student klasslaryňyza ýazyň.
Figure klassyňyza figuranyň meýdanyny we perimetrini almak üçin
abstrakt metodlar ýazyň.