PHP-тегі ООП-да бірнеше интерфейстер
PHP-де көптік мұрагерлік жоқ - әрбір
кластың тек бір ата-анасы болуы мүмкін.
Алайда, интерфейстермен жағдай басқаша:
әрбір класс кез келген мөлшердегі
интерфейстерді жүзеге асыра алады. Ол үшін интерфейстердің атауларын
implements кілт сөзінен кейін үтір арқылы жіктеу керек.
Бұл интерфейстердің абстрактілі кластардан тағы бір айырмашылығы - бірнеше интерфейстерді жүзеге асыруға болады, бірақ бірнеше абстрактілі кластарды мұрагерлікке алуға болмайды.
Практикада көрейік. iFigure интерфейсінен басқа
iTetragon интерфейсі бар делік.
Бұл интерфейстің әдістерін
Quadrate және Rectangle кластары жүзеге асырады,
себебі олардың 4 қабырғасы бар, бірақ Disk
класы жүзеге асырмайды.
iTetragon интерфейсі төртбұрыштың
барлық төрт қабырғасы үшін геттерлерді
сипаттасын:
<?php
interface iTetragon
{
public function getA();
public function getB();
public function getC();
public function getD();
}
?>
Сондай-ақ, бізде бұрын жасаған
iFigure интерфейсі бар делік:
<?php
interface iFigure
{
public function getSquare();
public function getPerimeter();
}
?>
Quadrate класы екі интерфейсті жүзеге асырсын. Ол үшін
екі интерфейсті implements кілт сөзінен кейін үтір арқылы
жіктейміз:
<?php
class Quadrate implements iFigure, iTetragon
{
// мұнда жүзеге асырылуы болады
}
?>
Енді Quadrate класын iTetragon интерфейсін
жүзеге асыратындай етіп әзірлейік.
Біздің шаршымыз төртбұрыштың ерекше жағдайы
болып табылатыны анық, себебі шаршының
барлық қабырғалары тең. Сондықтан барлық жаңа әдістер
бірдей нәрсені - шаршының енін қайтарады:
<?php
class Quadrate implements iFigure, iTetragon
{
private $a;
public function __construct($a)
{
$this->a = $a;
}
public function getA()
{
return $this->a;
}
public function getB()
{
return $this->a;
}
public function getC()
{
return $this->a;
}
public function getD()
{
return $this->a;
}
public function getSquare()
{
return $this->a * $this->a;
}
public function getPerimeter()
{
return 4 * $this->a;
}
}
?>
Тік төртбұрышта барлық қабырғалары бірдей емес екені анық,
тек қарама-қарсы қабырғалары ғана бірдей.
Бұл жағдайда жаңа әдістер сәл өзгеше болады.
Ал, кез келген трапецияда
барлық 4 қабырғасы әртүрлі болады.
Дегенмен, қандай фигураны қарастыратынымыз маңызды емес - маңыздысы, осы фигуралардың барлығында сипатталған әдістер болады (тіпті кейбір фигуралар ерекше болса да) және бір типте жұмыс істейді.
Rectangle класы да екі интерфейсті жүзеге асыратындай етіңіз:
iFigure және iTetragon.
getRadius және getDiameter әдістері бар
iCircle интерфейсін жасаңыз.
Disk класы да екі интерфейсті жүзеге асыратындай етіңіз:
iFigure және iCircle.