Синфҳои абстрактӣ дар ООП дар 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; // хато медиҳад
?>
Вале мерос гирифтан аз синфи мо
имконпазир хоҳад буд. Биёед синфи Employee-ро созем, ки
аз синфи абстрактии мо User
мерос гирад:
<?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-ро созед,
ки намояндагӣ мекунад аз як шакли геометрӣ
(ҳандасӣ). Бигзор аз он синфҳо
барои доира, росткунҷа ва мураббаъ мерос гиранд.