⊗ppOpIfSII 73 of 107 menu

Több interfész az OOP-ban PHP-ben

A PHP-ban nincs többszörös öröklődés - minden osztálynak csak egy szülője lehet. Az interfészekkel azonban más a helyzet: minden osztály bármennyi interfészt megvalósíthat. Ehhez az interfészek neveit vesszővel elválasztva kell felsorolni a kulcsszó implements után.

Ez egy további különbség az interfészek és az absztrakt osztályok között - sok interfészt meg lehet valósítani, de több absztrakt osztályt nem lehet örökölni.

Próbáljuk ki gyakorlatban. Tegyük fel, hogy az iFigure interfészen kívül van egy iTetragon interfészünk is. Ennek az interfésznek a metódusait a Quadrate és Rectangle osztályok valósítják meg, mivel nekik 4 oldaluk van, de a Disk osztály nem.

Tegyük fel, hogy az iTetragon interfész leírja a gettereket a négyszög mind a négy oldalához:

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

Tegyük fel, hogy van még az iFigure interfészünk is, amelyet korábban már készítettünk:

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

Tegyük úgy, hogy a Quadrate osztály két interfészt valósítson meg. Ehhez soroljuk fel mindkét interfészt vesszővel elválasztva a kulcsszó implements után:

<?php class Quadrate implements iFigure, iTetragon { // itt lesz a megvalósítás } ?>

Dolgozzuk most tovább a Quadrate osztályunkat, hogy megvalósítsa az iTetragon interfészt. Nyilvánvaló, hogy a négyzetünk a négyszög degenerált esete, hiszen a négyzetnek minden oldala egyenlő. Ezért az összes új metódus ugyanazt fogja visszaadni - a négyzet szélességét:

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

Nyilvánvaló, hogy a téglalapban már nem minden oldal egyforma, hanem csak a szemköztiek. Ebben az esetben az új metódusok kissé meg fognak különbözni. Nos, és egy trapéznál általában mind a 4 oldal különböző lesz.

Azonban nem számít, milyen alakzatot vizsgálunk - fontos, hogy ezek az alakzatok mind rendelkeznek a leírt metódusokkal (még ha némelyik alakzat degenerált is) és egyformán működnek.

Tegye úgy, hogy a Rectangle osztály szintén két interfészt valósítson meg: mind az iFigure-t, mind az iTetragon-t.

Készítsen egy iCircle interfészt a getRadius és getDiameter metódusokkal.

Tegye úgy, hogy a Disk osztály is két interfészt valósítson meg: mind az iFigure-t, mind az iCircle-t.

Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás