⊗ppOpIfSII 73 of 107 menu

Няколко интерфейса в ООП в 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.

Направете интерфейс iCircle с методи getRadius и getDiameter.

Направете така, че класът Disk също да реализира два интерфейса: и iFigure, и iCircle.

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне