PHP да ООПда абстракт класслар
Фарз қилайлик, сизда User класси бор, ва
ундан Employee ва Student класслари
мерос олган.
Бунда, сиз Employee ва Student классларининг
объектларини яратасиз, лекин User классининг
объектларини яратмайсиз, чунки ушбу класс фақат
ўзининг меросхўрларининг умусий хусусият ва
методларини гуруҳлаш учун ишлатилади.
Бундай ҳолда, User классининг объектларини
яратишни мажбурий равишда тақиқлаш мумкин, шу
сабаб сиз ёки бошқа программист бирон жерда
уларни tasodifan яратмаслиги учун.
Бuning учун абстракт класслар деб аталувчи класслар мавжуд. Абстракт класслар ўзидан мерос олиш учун мўлжалланган класслардир. Бундай классларнинг объектларини яратиб бўлмайди.
Классни абстракт эълон қилиш учун, уни
эълон қилишда 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; // хатолик берadi
?>
Аммо бизнинг классимиздан мерос олиш
имконияти бўлади. Келгинг 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 классини яратинг,
у геометрик шаклни ифодаловчи бўлсин.
Ундан айлана, тўртбурчак ва квадрат
учун класслар мерос олсин.