⊗ppOpIfAp 68 of 107 menu

Interfeisu pielietojums OOP PHP

Tātad, mēs jau esam noskaidrojuši, ka interfeisi ir labs veids, kā kontrolēt, ka visas nepieciešamās klases metodes ir realizētas.

Apskatīsim vēl vienu, praktiskāku, piemēru. Pieņemsim, ka mums ir klase, kurā tiks glabāts objektu - ģeometrisko formu masīvs:

<?php class FiguresCollection { private $figures = []; // masīvs formām } ?>

Realizēsim mūsu klasē metodi addFigure objektu pievienošanai kolekcijā:

<?php class FiguresCollection { private $figures = []; // Parametrā tiek padots objekts ar formu: public function addFigure($figure) { $this->figures[] = $figure; } } ?>

Acīmredzot, mēs rēķināmies ar to, ka metodes addFigure parametrā tiks padots objekts ar ģeometrisko formu. Tomēr par to nav nekādas kontroles!

Izmantosim tipu mājienu un skaidri norādīsim objektu tipu kā Figure:

<?php class FiguresCollection { private $figures = []; public function addFigure(Figure $figure) { $this->figures[] = $figure; } } ?>

Izpētīsim, ko mēs esam izdarījuši.

Ja Figure būtu reāli pastāvoša klase, tad metodē kā parametru mēs varētu padot šīs klases objektus, kā arī tās mantiniekus.

Mums taču Figure ir interfeiss. Šādā gadījumā mājiens nozīmē, ka metodes parametrā var tikt padoti tikai to klašu objekti, kas realizē mūsu interfeisu.

Mēģināsim izveidot mūsu klases objektu un pievienot tajā ģeometriskās formas:

<?php $figuresCollection = new FiguresCollection; // Pievienosim pāris kvadrātus: $figuresCollection->add(new Quadrate(2)); $figuresCollection->add(new Quadrate(3)); // Pievienosim pāris taisnstūrus: $figuresCollection->add(new Rectangle(2, 3)); $figuresCollection->add(new Rectangle(3, 4)); ?>

Mēģinājums pievienot kādas citas klases objektu izraisīs kļūdu:

<?php $figuresCollection = new FiguresCollection; class Test {}; // kāda cita klase $figuresCollection->add(new Test); // izvadīs kļūdu ?>

Ko praksē mums sniedz šāda kontrole: tā kā visas kolekcijā pievienotās formas realizē interfeisu Figure, mēs varam būt pārliecināti, ka katrai no tām būs metode getSquare un metode getPerimeter.

Iespējams nākotnē papildus kvadrātam un taisnstūrim parādīsies, piemēram, vēl trīsstūris. Šādā gadījumā arī trīsstūrim būs metodes getSquare un getPerimeter.

Praksē tas mums dod sekojošo: mēs varam klasē FiguresCollection izveidot, piemēram, metodi getTotalSquare, kas atrod kopējo formu kolekcijas laukumu. Šajā metodē mēs ciklā pārtīsim formu masīvu un katrai formai izsauksim metodi getSquare.

Tā kā katra forma realizē interfeisu Figure, mēs varam būt 100% pārliecināti par to, ka katrai formai būs šī metode getSquare.

Tātad, šeit ir metodes realizācija:

<?php class FiguresCollection { private $figures = []; public function addFigure(Figure $figure) { $this->figures[] = $figure; } // Atradīsim kopējo laukumu: public function getTotalSquare() { $sum = 0; foreach ($this->figures as $figure) { $sum += $figure->getSquare(); // izmantojam metodi getSquare } return $sum; } } ?>

Neieskatoties manā kodā, realizējiet tādu pašu klasi FiguresCollection.

Pievienojiet klasei FiguresCollection metodi getTotalPerimeter, lai atrastu visu formu kopējo perimetru.

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