⊗ppOpIfSII 73 of 107 menu

Flera gränssnitt i OOP i PHP

I PHP finns det inget multipelt arv - varje klass kan bara ha en förälder. Med gränssnitt är det dock annorlunda: varje klass kan implementera valfritt antal gränssnitt. För detta ska gränssnittens namn listas efter nyckelordet implements, separerade med kommatecken.

Detta visar en annan skillnad mellan gränssnitt och abstrakta klasser - man kan implementera många gränssnitt, men man kan inte ärva flera abstrakta klasser.

Låt oss prova i praktiken. Antag att förutom gränssnittet iFigure så har vi också gränssnittet iTetragon. Metoderna i detta gränssnitt kommer att implementeras av klasserna Quadrate och Rectangle, eftersom de har 4 sidor, men inte klassen Disk.

Låt gränssnittet iTetragon beskriva getters för alla fyra sidorna på en fyrhörning:

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

Antag också att vi har gränssnittet iFigure, som vi redan skapat tidigare:

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

Låt oss se till att klassen Quadrate implementerar två gränssnitt. För detta listar vi båda gränssnitten efter nyckelordet implements, separerade med kommatecken:

<?php class Quadrate implements iFigure, iTetragon { // implementation kommer här } ?>

Låt oss nu utveckla vår klass Quadrate, så att den implementerar gränssnittet iTetragon. Det är tydligt att vår kvadrat är ett degenererat fall av en fyrhörning, eftersom alla sidor i en kvadrat är lika. Därför kommer alla nya metoder att returnera samma sak - kvadratens bredd:

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

Uppenbarligen är inte alla sidor lika i en rektangel, bara de motsatta sidorna. I det här fallet kommer de nya metoderna att skilja sig något. Och i till exempel en trapets kommer alla 4 sidor att vara olika.

Men det spelar ingen roll vilken figur vi betraktar - det viktiga är att alla dessa figurer kommer att ha de beskrivna metoderna (även om vissa figurer är degenererade) och fungera på ett enhetligt sätt.

Se till att klassen Rectangle också implementerar två gränssnitt: både iFigure, och iTetragon.

Skapa gränssnittet iCircle med metoderna getRadius och getDiameter.

Se till att klassen Disk också implementerar två gränssnitt: både iFigure, och iCircle.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa