⊗ppOpIfSII 73 of 107 menu

Meerdere interfaces in OOP in PHP

In PHP is er geen meervoudige overerving - elke klasse kan slechts één ouder hebben. Met interfaces is het echter anders: elke klasse kan elk aantal interfaces implementeren. Om dit te doen moeten de interfacenamen opgesomd worden, gescheiden door komma's, na het sleutelwoord implements.

Dit laat een ander verschil zien tussen interfaces en abstracte klassen - je kunt veel interfaces implementeren, maar je kunt niet van meerdere abstracte klassen overerven.

Laten we het in de praktijk proberen. Stel dat we naast de interface iFigure ook de interface iTetragon hebben. De methodes van deze interface zullen worden geïmplementeerd door de klassen Quadrate en Rectangle, omdat zij 4 zijden hebben, maar niet door de klasse Disk.

Stel dat de interface iTetragon getters beschrijft voor alle vier de zijden van de vierhoek:

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

Stel dat we ook de interface iFigure hebben, die we eerder al hebben gemaakt:

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

Laten we ervoor zorgen dat de klasse Quadrate twee interfaces implementeert. Om dit te doen enumereren we beide interfaces, gescheiden door een komma, na het sleutelwoord implements:

<?php class Quadrate implements iFigure, iTetragon { // hier komt de implementatie } ?>

Laten we nu onze klasse Quadrate aanpassen, zodat deze de interface iTetragon implementeert. Het is duidelijk dat ons vierkant een gedegenereerd geval is van een vierhoek, want bij een vierkant zijn alle zijden gelijk. Daarom zullen alle nieuwe methodes hetzelfde teruggeven - de breedte van het vierkant:

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

Het is duidelijk dat in een rechthoek niet alle zijden hetzelfde zijn, maar alleen de tegenoverliggende. In dit geval zullen de nieuwe methodes een beetje gaan verschillen. En in een willekeurige trapezium zullen over het algemeen alle 4 zijden verschillend zijn.

Het maakt echter niet uit welke vorm we beschouwen - belangrijk is dat al deze vormen de beschreven methodes zullen hebben (ook al zijn sommige vormen gedegenereerd) en op een uniforme manier werken.

Zorg ervoor dat de klasse Rectangle ook twee interfaces implementeert: zowel iFigure, als iTetragon.

Maak een interface iCircle met de methodes getRadius en getDiameter.

Zorg ervoor dat de klasse Disk ook twee interfaces implementeert: zowel iFigure, als iCircle.

Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren