⊗ppOpIfSII 73 of 107 menu

Vairāki interfeisi OOP PHP

PHP nav daudzkārtējas mantojums - katrai klasei var būt tikai viens vecāks. Tomēr ar interfeisiem situācija ir citāda: katra klase var implementēt jebkādu skaitu interfeisu. Lai to izdarītu, interfeisu nosaukumi jāuzskaita ar komatiem aiz atslēgvārda implements.

Tas ir vēl viens atšķirības punkts starp interfeisiem un abstraktajām klasēm - var implementēt daudzus interfeisus, bet vairākas abstraktās klases nevar mantot.

Izmēģināsim to praksē. Pieņemsim, ka papildus interfeisam iFigure mums ir arī interfeiss iTetragon. Šī interfeisa metodes implementēs klases Quadrate un Rectangle, jo tām ir 4 malas, bet ne klase Disk.

Lai interfeiss iTetragon apraksta getterus visām četrām četrstūra malām:

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

Pieņemsim arī, ka mums ir interfeiss iFigure, ko mēs jau izveidojām iepriekš:

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

Padarīsim tā, lai klase Quadrate implementētu divus interfeisus. Lai to izdarītu, uzskaitīsim abus interfeisus ar komatiem aiz atslēgvārda implements:

<?php class Quadrate implements iFigure, iTetragon { // šeit būs implementācija } ?>

Tagad izstrādāsim mūsu klasi Quadrate tālāk, lai tā implementētu interfeisu iTetragon. Skaidrs, ka mūsu kvadrāts ir deģenerēts četrstūra gadījums, jo kvadrātam visas malas ir vienādas. Tāpēc visas jaunās metodes atgriezīs to pašu - kvadrāta platumu:

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

Acīmredzot taisnstūrī jau ne visas malas ir vienādas, bet tikai pretējās. Šajā gadījumā jaunās metodes kļūs nedaudz atšķirīgas. Un, piemēram, trapecē parasti visas 4 malas būs dažādas.

Tomēr nav svarīgi, kāda figūra tiks aplūkota - svarīgi, ka visas šīs figūras būs aprakstītās metodes (lai gan dažas figūras ir deģenerētas) un darbosies vienveidīgi.

Izdariet tā, lai klase Rectangle arī implementētu divus interfeisus: gan iFigure, gan iTetragon.

Izveidojiet interfeisu iCircle ar metodēm getRadius un getDiameter.

Izdariet tā, lai klase Disk arī implementētu divus interfeisus: gan iFigure, gan iCircle.

Latviešu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mēs izmantojam sīkdatnes, lai nodrošinātu vietnes darbību, analīti un personalizāciju. Datu apstrāde notiek saskaņā ar Konfidencialitātes politiku.
pieņemt visus iestatīt noraidīt