⊗ppOpIfSII 73 of 107 menu

Keli interfeisai OOP PHP

PHP palaiko daugialypę interfeisų realizaciją – kiekviena klasė gali realizuoti bet kokį skaičių interfeisų. Tam interfeisų vardus reikia išvardyti per kablelį po raktažodžio implements.

Tai dar vienas interfeisų skirtumas nuo abstrakčių klasių – galima realizuoti daug interfeisų, bet paveldėti kelias abstrakčias klases negalima.

Išbandykime praktiškai. Tarkime, kad be interfeiso iFigure, turime ir interfeisą iTetragon. Šio interfeiso metodus realizuos klasės Quadrate ir Rectangle, kadangi jos turi 4 kraštines, bet ne klasė Disk.

Tarkime, kad interfeisas iTetragon aprašo getterius visoms keturioms keturkampio kraštinėms:

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

Tarkime, kad turime ir interfeisą iFigure, kurį jau sukūrėme anksčiau:

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

Padarykime, kad klasė Quadrate realizuotų du interfeisus. Tam išvardinkime abu interfeisus per kablelį po raktažodžio implements:

<?php class Quadrate implements iFigure, iTetragon { // čia bus realizacija } ?>

Papildykime dabar mūsų klasę Quadrate, kad ji realizuotų interfeisą iTetragon. Aišku, kad mūsų kvadratas yra išsigimęs keturkampio atvejis, nes kvadrato visos kraštinės yra lygios. Todėl visi nauji metodai grąžins tą patį – kvadrato plotį:

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

Akivaizdu, kad stačiakampyje jau ne visos kraštinės yra vienodos, o tik priešingos. Šiuo atveju nauji metodai šiek tiek skirsis. O, pavyzdžiui, trapecijoje apskritai visos 4 kraštinės bus skirtingos.

Tačiau nesvarbu, kokią figūrą nagrinėsime – svarbu, kad visos šios figūros turės aprašytus metodus (net jei kai kurios figūros yra išsigimusios) ir veiks vienodai.

Padarykite taip, kad klasė Rectangle taip pat realizuotų du interfeisus: ir iFigure, ir iTetragon.

Sukurkite interfeisą iCircle su metodais getRadius ir getDiameter.

Padarykite taip, kad klasė Disk taip pat realizuotų du interfeisus: ir iFigure, ir iCircle.

Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti