⊗ppOpIfSII 73 of 107 menu

Useita rajapintoja OOP:ssa PHP:ssä

PHP:ssä ei ole moniperintää - jokaisella luokalla voi olla vain yksi vanhempi. Rajapintojen kanssa asia on kuitenkin toisin: jokainen luokka voi toteuttaa minkä tahansa määrän rajapintoja. Tätä varten rajapintojen nimet on lueteltava pilkuilla erotettuna avainsanan implements jälkeen.

Tässä ilmenee toinen ero rajapintojen ja abstraktien luokkien välillä - voi toteuttaa monta rajapintaa, mutta useita abstrakteja luokkia ei voi periä.

Kokeillaan käytännössä. Oletetaan, että rajapinnan iFigure lisäksi meillä on myös rajapinta iTetragon. Tämän rajapinnan metodit toteuttavat luokat Quadrate ja Rectangle, koska niillä on 4 sivua, mutta ei luokka Disk.

Oletetaan, että rajapinta iTetragon kuvaa getterit kaikille neljälle nelikulmion sivulle:

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

Oletetaan myös, että meillä on rajapinta iFigure, jön teimme aiemmin:

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

Tehdään niin, että luokka Quadrate toteuttaa kaksi rajapintaa. Tätä varten luettelemme molemmat rajapinnat pilkuilla erotettuna avainsanan implements jälkeen:

<?php class Quadrate implements iFigure, iTetragon { // tulee toteutus } ?>

Kehitetään nyt luokkaamme Quadrate, jotta se toteuttaisi rajapinnan iTetragon. On selvää, että neliömme on rappeutunut tapaus nelikulmiosta, sillä neliöllä kaikki sivut ovat yhtä suuret. Siksi kaikki uudet metodit palauttavat saman asian - neliön leveyden:

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

On selvää, että suorakulmiossa kaikki sivut eivät ole enää samoja, vaan vain vastakkaiset. Tässä tapauksessa uudet metodit eroavat hieman toisistaan. No, ja jossain puolisuunnikkaassa kaikki 4 sivut ovat yleensä erilaisia.

Siitä huolimatta, millaista kuviota tarkastelemme, ei kuitenkaan ole väliä - tärkeää on, että kaikki nämä kuviot sisältävät kuvatut metodit (vaikka jotkin kuviot ovatkin rappeutuneita) ja toimivat yhtenäisesti.

Tee niin, että luokka Rectangle myös toteuttaa kaksi rajapintaa: sekä iFigure, että iTetragon.

Tee rajapinta iCircle metodeilla getRadius ja getDiameter.

Tee niin, että luokka Disk myös toteuttaa kaksi rajapintaa: sekä iFigure, että iCircle.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää