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 калит сўзидан кейин иккиala интерфейсни вергул билан кўрсатамиз:
<?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.