⊗ppOpIfSII 73 of 107 menu

Mitme liidese rakendamine OOP-s PHP-s

PHP-s puudub mitmikpärimus - igal klassil võib olla ainult üks ülemklass. Liidestega on aga teine lugu: iga klass võib rakendada suvalise arvu liideseid. Selleks tuleb liideste nimed loetleda koma abil pärast võtmesõna implements.

See on veel üks erinevus liideste ja abstraktsete klasside vahel - saab rakendada mitu liidest, kuid mitut abstraktset klassi pärida ei saa.

Proovime seda praktikas. Oletame, et peale liidese iFigure on meil ka liides iTetragon. Selle liidese meetodid rakendavad klassid Quadrate ja Rectangle, kuna neil on 4 külge, kuid mitte klass Disk.

Oletame, et liides iTetragon kirjeldab getter-id kõikidele neljale nelinurga küljele:

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

Oletame ka, et meil on liides iFigure, mille me juba varem tegime:

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

Teeme nii, et klass Quadrate rakendaks kahte liidest. Selleks loetleme mõlemad liidesed koma abil pärast võtmesõna implements:

<?php class Quadrate implements iFigure, iTetragon { // siin on rakendus } ?>

Viime nüüd oma klassi Quadrate lõpuni, et see rakendaks liidest iTetragon. On selge, et meie ruut on degenereerunud nelinurga juhtum, sest ruudul on kõik küljed võrdsed. Seega kõik uued meetodid tagavad sama asja - ruudu laiuse:

<?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 ilmne, et ristkülikus pole jagi kõik küljed samased, vaid vastasküljed. Sellisel juhul uued meetodid muutuvad veidi erinevaks. Noh, ja mõnes trapetsis on üldse kõik 4 külge erinevad.

Siiski, pole vahet, millist kujundit me vaatleme - oluline on, et kõik need kujundid omavad kirjeldatud meetodeid (olgu mõned kujundid ka degenereerunud) ja töötavad ühtemoodi.

Tehke nii, et klass Rectangle samuti rakendaks kahte liidest: nii iFigure kui ka iTetragon.

Tehke liides iCircle meetoditega getRadius ja getDiameter.

Tehke nii, et klass Disk samuti rakendaks kahte liidest: nii iFigure kui ka iCircle.

Eesti
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Me kasutame saidi toimimiseks, analüüsi ja personaliseerimiseks küpsiseid. Andmete töötlemine toimub vastavalt Privaatsuspoliitikale.
nõustu kõigega häälesta keeldu