⊗ppOpIfSII 73 of 107 menu

Više interfejsa u OOP-u u PHP-u

PHP nema višestruko nasleđivanje - svaka klasa može imati samo jednog roditelja. Sa interfejsima je, međutim, drugačije: svaka klasa može implementirati bilo koji broj interfejsa. Da bismo to uradili, imena interfejsa treba navesti zarezom posle ključne reči implements.

Ovo je još jedna razlika interfejsa od apstraktnih klasa - možete implementirati više interfejsa, ali ne možete naslediti više apstraktnih klasa.

Hajde da probamo u praksi. Pored interfejsa iFigure, pretpostavimo da imamo i interfejs iTetragon. Metode ovog interfejsa će implementirati klase Quadrate i Rectangle, jer one imaju 4 strane, ali ne i klasa Disk.

Neka interfejs iTetragon opisuje getere za sve četiri strane četvorougla:

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

Neka takođe postoji interfejs iFigure, koji smo već pravili ranije:

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

Hajde da učinimo da klasa Quadrate implementira dva interfejsa. Da bismo to uradili, nabrojimo oba interfejsa zarezom posle ključne reči implements:

<?php class Quadrate implements iFigure, iTetragon { // ovde će biti implementacija } ?>

Sada ćemo doraditi našu klasu Quadrate, tako da implementira interfejs iTetragon. Jasno je da je naš kvadrat degenerisani slučaj četvorougla, jer kvadrat ima sve strane jednake. Stoga će sve nove metode vraćati istu vrednost - širinu 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čigledno je da u pravougaoniku već nisu sve strane iste, već samo naspramne. U tom slučaju, nove metode će se malo razlikovati. Pa, i u nekoj trapezu uopšte će sve 4 strane biti različite.

Međutim, nije važno koju figuru razmatramo - važno je da će sve te figure imati opisane metode (neka su neke figure i degenerisane) i radiće na isti način.

Učinite da klasa Rectangle takođe implementira dva interfejsa: i iFigure, i iTetragon.

Napravite interfejs iCircle sa metodama getRadius i getDiameter.

Učinite da klasa Disk takođe implementira dva interfejsa: i iFigure, i iCircle.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij