⊗ppOpIfSII 73 of 107 menu

Flere grænseflader i OOP i PHP

I PHP er der ikke multipel arv - hver klasse kan kun have én forælder. Med grænseflader er det dog anderledes: hver klasse kan implementere et hvilket som helst antal grænseflader. For at gøre dette skal navnene på grænsefladerne opstilles efter nøgleordet implements adskilt af komma.

Dette viser en anden forskel mellem grænseflader og abstrakte klasser - man kan implementere mange grænseflader, men man kan ikke arve fra flere abstrakte klasser.

Lad os prøve det i praksis. Antag at vi foruden grænsefladen iFigure også har grænsefladen iTetragon. Metoderne i denne grænseflade vil blive implementeret af klasserne Quadrate og Rectangle, da de har 4 sider, men ikke klassen Disk.

Lad grænsefladen iTetragon beskrive gettere for alle fire sider på en firkan:

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

Antag også at vi har grænsefladen iFigure, som vi lavede tidligere:

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

Lad os sørge for, at klassen Quadrate implementerer to grænseflader. For at gøre dette opstiller vi begge grænseflader adskilt af komma efter nøgleordet implements:

<?php class Quadrate implements iFigure, iTetragon { // implementering vil være her } ?>

Lad os nu tilpasse vores klasse Quadrate, så den implementerer grænsefladen iTetragon. Det er klart, at vores kvadrat er et degenereret tilfælde af en firkan, da alle sider i et kvadrat er lige lange. Derfor vil alle de nye metoder returnere det samme - kvadratets bredde:

<?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 indlysende, at ikke alle sider i et rektangel er ens, kun de modstående sider er. I dette tilfælde vil de nye metoder være lidt forskellige. Og i for eksempel en trapez vil alle 4 sider være forskellige.

Uanset hvilken figur vi betragter, er det dog vigtigt, at alle disse figurer vil have de beskrevne metoder (selvom nogle figurer er degenererede) og fungere på en ensartet måde.

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

Lav grænsefladen iCircle med metoderne getRadius og getDiameter.

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

Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικά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
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis