⊗ppOpIfSII 73 of 107 menu

Viacero rozhraní v OOP v PHP

V PHP neexistuje viacnásobné dedenie - každá trieda môže mať len jedného rodiča. S rozhraniami je to však inak: každá trieda môže implementovať ľubovoľný počet rozhraní. Na to je potrebné mená rozhraní uviesť oddelené čiarkou za kľúčovým slovom implements.

To je ďalší rozdiel medzi rozhraniami a abstraktnými triedami - je možné implementovať viacero rozhraní, ale nie je možné zdediť viacero abstraktných tried.

Vyskúšajme si to v praxi. Predpokladajme, že okrem rozhrania iFigure máme tiež rozhranie iTetragon. Metódy tohto rozhrania budú implementovať triedy Quadrate a Rectangle, pretože majú 4 strany, ale nie trieda Disk.

Nech rozhranie iTetragon opisuje gettery pre všetky štyri strany štvoruholníka:

<?php interface iTetragon { public function getA(); public function getB(); public function getC(); public function getD(); } ?>

Predpokladajme tiež, že máme rozhranie iFigure, ktoré sme vytvorili skôr:

<?php interface iFigure { public function getSquare(); public function getPerimeter(); } ?>

Upravme triedu Quadrate tak, aby implementovala dve rozhrania. Na to vypíšme obe rozhrania oddelené čiarkou za kľúčovým slovom implements:

<?php class Quadrate implements iFigure, iTetragon { // tu bude implementácia } ?>

Dokončime teraz našu triedu Quadrate, aby implementovala rozhranie iTetragon. Je jasné, že náš štvorec je špeciálnym prípadom štvoruholníka, pretože všetky strany štvorca sú rovnaké. Preto všetky nové metódy budú vracať to isté - šírku štvorca:

<?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; } } ?>

Je zrejmé, že v obdĺžniku už nie sú všetky strany rovnaké, ale iba protiľahlé. V tomto prípade sa nové metódy budú mierne líšiť. A napríklad v lichobežníku budú všetky 4 strany úplne odlišné.

Avšak nezáleží na tom, aký útvar budeme uvažovať - dôležité je, že všetky tieto útvary budú mať popísané metódy (aj keď niektoré útvary sú špeciálne prípady) a budú fungovať rovnako.

Upravte triedu Rectangle tak, aby implementovala dve rozhrania: iFigure a iTetragon.

Vytvorte rozhranie iCircle s metódami getRadius a getDiameter.

Upravte triedu Disk tak, aby implementovala dve rozhrania: iFigure a iCircle.

Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť