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.