⊗ppOpIfSII 73 of 107 menu

Več vmesnikov v OOP v PHP

V PHP ni večkratnega dedovanja - vsak razred ima lahko samo enega starša. Z vmesniki pa je drugače: vsak razred lahko implementira poljubno število vmesnikov. Za to je treba imena vmesnikov našteti z vejico za ključno besedo implements.

To kaže še eno razliko med vmesniki in abstraktnimi razredi - lahko implementiramo več vmesnikov, vendar več abstraktnih razredov ni mogoče podedovati.

Poskusimo v praksi. Naj poleg vmesnika iFigure obstaja tudi vmesnik iTetragon. Metode tega vmesnika bodo implementirali razredi Quadrate in Rectangle, ker imajo 4 stranice, razred Disk pa ne.

Naj vmesnik iTetragon opiše getterje za vse štiri stranice štirikotnika:

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

Naj imamo tudi vmesnik iFigure, ki smo ga že naredili prej:

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

Naredimo tako, da razred Quadrate implementira dva vmesnika. Za to naštejemo oba vmesnika z vejico za ključno besedo implements:

<?php class Quadrate implements iFigure, iTetragon { // tukaj bo implementacija } ?>

Sedaj dopolnimo naš razred Quadrate, tako da bo implementiral vmesnik iTetragon. Jasno je, da je naš kvadrat degeneriran primer štirikotnika, saj ima kvadrat vse stranice enake. Zato bodo vse nove metode vračale isto - širino kvadrata:

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

Očitno v pravokotniku niso vse stranice enake, ampak le nasprotne. V tem primeru se bodo nove metode nekoliko razlikovale. No, in v nekem trapezu pa bodo vse 4 stranice povsem različne.

Vendar ni pomembno, katero figuro obravnavamo - pomembno je, da bodo vse te figure imele opisane metode (četudi so nekatere figure degenerirane) in delovale enotno.

Naredite tako, da razred Rectangle prav tako implementira dva vmesnika: iFigure in iTetragon.

Naredite vmesnik iCircle z metodama getRadius in getDiameter.

Naredite tako, da razred Disk prav tako implementira dva vmesnika: iFigure in iCircle.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni