PHP-тегі ООП-дегі абстрактты класстар
Сізде User класы бар делік, ал одан
Employee және Student кластары
мұра етеді.
Бұл ретте сіз Employee және Student
кластарының объектілерін жасайсыз деп болжанады,
бірақ User класының объектілерін - жаспайсыз,
себебі бұл клас тек өз мұрагерлерінің жалпы
қасиеттері мен әдістерін топтау үшін қолданылады.
Бұл жағдайда User класының объектілерін
жасауды мәжбүрлеп тыйым салуға болады, осылайша
сіз немесе басқа бағдарламашы оларды кездейсоқ
жасап алмайды.
Бұл үшін абстрактты класстар деп аталатындар бар. Абстрактты класстар олардан мұра ету үшін арналған класстар болып табылады. Бұл ретте мұндай класстардың объектілерін жасауға болмайды.
Класты абстрактты деп жариялау үшін,
оны жариялау кезінде abstract кілт сөзін
жазу керек:
<?php
abstract class User
{
}
?>
Ендеше, User абстрактты класының
реализациясын жазайық. Онда name жеке
қасиеті болсын, сонымен қатар ол үшін геттерлер
мен сеттерлер болсын:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
User класының объектісін жасау әрекеті
қате шығарады:
<?php
$user = new User; // қате шығарады
?>
Ал біздің кластан мұра етуге болады.
User абстрактты класымыздан мұра ететін
Employee класын жасайық:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Employee класының объектісін жасайық -
бәрі жұмыс істейді:
<?php
$employee = new Employee;
$employee->setName('john'); // ата-ана әдісі, яғни User класының
$employee->setSalary(1000); // меншікті әдісі, яғни Employee класының
echo $employee->getName(); // 'john' шығарады
echo $employee->getSalary(); // 1000 шығарады
?>
Геометриялық фигураны білдіретін абстрактты
Figure класын жасаңыз. Одан шеңбер,
тік төртбұрыш және шаршы үшін кластар
мұра етсін.