Klasat Abstrakte në OOP në PHP
Le të supozojmë se keni një klasë User, dhe prej
saj trashëgohen klasat Employee dhe
Student.
Në këtë rast, supozohet se ju do të krijoni
objekte të klasave Employee dhe Student,
por objektet e klasës User - nuk do t'i krijoni,
sepse kjo klasë përdoret vetëm për
grupimin e vetive dhe metodave të përgjithshme të
trashëgimtarëve të saj.
Në këtë rast mund të ndalohet me forcë
krijimi i objekteve të klasës User, në mënyrë që
ju ose një programues tjetër diku aksidentalisht
të mos i krijoni ato.
Për këtë ekzistojnë të ashtuquajturat klasa abstrakte. Klasat abstrakte përfaqësojnë klasa të destinuara për trashëgim prej tyre. Në këtë rast, objektet e këtyre klasave nuk mund të krijohen.
Që të deklarohet një klasë si abstrakte,
duhet të shkruhet fjala kyçe abstract
gjatë deklarimit të saj:
<?php
abstract class User
{
}
?>
Pra, le të shkruajmë implementimin e klasës
abstrakte User. Le të ketë një veti
private name, si dhe getters dhe setters
për të:
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
}
?>
Përpjekja për të krijuar një objekt të klasës User
do të shkaktojë gabim:
<?php
$user = new User; // do të japë gabim
?>
Por nga ana tjetër, do të jetë e mundur
të trashëgohet nga klasa jonë. Le të bëjmë klasën Employee, e cila
do të trashëgojë nga klasa jonë abstrakte
User:
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
}
?>
Le të krijojmë një objekt të klasës Employee -
gjithçka do të funksionojë:
<?php
$employee = new Employee;
$employee->setName('john'); // metoda e prindit, d.m.th. e klasës User
$employee->setSalary(1000); // metoda e vet, d.m.th. e klasës Employee
echo $employee->getName(); // do të shfaqë 'john'
echo $employee->getSalary(); // do të shfaqë 1000
?>
Bëni një klasë abstrakte Figure,
që përfaqëson një figurë
gjeometrike. Le të trashëgojnë prej saj klasat
për rrethin, drejtkëndëshin dhe katrorin.