⊗ppOpIfSII 73 of 107 menu

Flere grensesnitt i OOP i PHP

I PHP finnes det ikke multiple arv - hver klasse kan bare ha én forelder. Med grensesnitt er det derimot annerledes: hver klasse kan implementere et hvilket som helst antall grensesnitt. For å gjøre dette må grensesnittnavnene listes opp etter komma etter nøkkelordet implements.

Dette viser en annen forskjell mellom grensesnitt og abstrakte klasser - man kan implementere mange grensesnitt, men man kan ikke arve fra flere abstrakte klasser.

La oss prøve dette i praksis. Anta at vi i tillegg til grensesnittet iFigure også har et grensesnitt iTetragon. Metodene til dette grensesnittet vil bli implementert av klassene Quadrate og Rectangle, siden de har 4 sider, men ikke av klassen Disk.

Anta at grensesnittet iTetragon beskriver gettere for alle fire sidene i en firkant:

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

Anta også at vi har grensesnittet iFigure, som vi lagde tidligere:

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

La oss sørge for at klassen Quadrate implementerer to grensesnitt. For å gjøre dette lister vi opp begge grensesnittene etter komma etter nøkkelordet implements:

<?php class Quadrate implements iFigure, iTetragon { // implementasjon kommer her } ?>

La oss videreutvikle klassen Quadrate nå, så den implementerer grensesnittet iTetragon. Det er klart at kvadratet vårt er et degenerert tilfelle av en firkant, fordi i et kvadrat er alle sidene like. Derfor vil alle de nye metodene returnere det samme - bredden på kvadratet:

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

Det er åpenbart at i et rektangel er ikke alle sidene like, bare de motsatte sidene. I dette tilfellet vil de nye metodene bli litt forskjellige. Og i for eksempel en trapes vil alle 4 sidene være helt forskjellige.

Uansett hvilken figur vi vurderer, er det imidlertid ikke viktig - det viktige er at alle disse figurene vil ha de beskrevne metodene (selv om noen figurer er degenererte) og fungere på en standardisert måte.

Sørg for at klassen Rectangle også implementerer to grensesnitt: både iFigure, og iTetragon.

Lag et grensesnitt iCircle med metoder getRadius og getDiameter.

Sørg for at klassen Disk også implementerer to grensesnitt: både iFigure, og iCircle.

Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis