⊗ppOpIfAp 68 of 107 menu

Die Toepassing van Koppelvlakke in OOP in PHP

So, ons het reeds vasgestel dat koppelvlakke 'n goeie manier is om te beheer dat al die nodige klasmetodes geïmplementeer is.

Kom ons kyk na nog 'n, meer praktiese, voorbeeld. Laat ons sê ons het 'n klas wat 'n versameling van voorwerpe-vorms sal stoor:

<?php class FiguresCollection { private $figures = []; // array vir vorms } ?>

Laat ons die metode addFigure implementeer om voorwerpe by die versameling te voeg:

<?php class FiguresCollection { private $figures = []; // 'n Voorwerp met 'n vorm word as parameter oorgedra: public function addFigure($figure) { $this->figures[] = $figure; } } ?>

Dit is duidelik dat ons verwag dat die parameter van die metode addFigure 'n voorwerp met 'n vorm sal wees. Daar is egter geen beheer hieroor nie!

Kom ons gebruik 'n tipewenking en duidelik die tipe voorwerpe as Figure spesifiseer:

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

Kom ons kyk na wat ons gedoen het.

As Figure 'n werklik bestaande klas was, sou ons voorwerpe van daardie klas, asook die erfgename daarvan, in die metodeparameter kon oordra.

By ons is Figure egter 'n koppelvlak. In hierdie geval beteken die wenking dat slegs voorwerpe van klasse wat ons koppelvlak implementeer, as metodeparameter oorgedra kan word.

Kom ons probeer om 'n voorwerp van ons klas te skep en vorms daaraan toe te voeg:

<?php $figuresCollection = new FiguresCollection; // Laat ons 'n paar vierkante byvoeg: $figuresCollection->add(new Quadrate(2)); $figuresCollection->add(new Quadrate(3)); // Laat ons 'n paar reghoeke byvoeg: $figuresCollection->add(new Rectangle(2, 3)); $figuresCollection->add(new Rectangle(3, 4)); ?>

'n Poging om 'n voorwerp van enige ander klas by te voeg, sal tot 'n fout lei:

<?php $figuresCollection = new FiguresCollection; class Test {}; // een of ander ander klas $figuresCollection->add(new Test); // sal 'n fout gee ?>

Wat gee hierdie beheer vir ons in die praktyk: aangesien alle vorms wat by die versameling gevoeg word, die koppelvlak Figure implementeer, kan ons seker wees dat elkeen van hulle die metode getSquare en die metode getPerimeter sal hê.

Miskien sal daar in die toekoms behalwe vierkant en reghoek byvoorbeeld ook 'n driehoek wees. In hierdie geval sal die driehoek ook die metodes getSquare en getPerimeter hê.

In die praktyk gee dit vir ons die volgende: ons kan in die klas FiguresCollection byvoorbeeld die metode getTotalSquare maak, wat die totale oppervlakte van die versamelingsvorms vind. In hierdie metode sal ons deur die vorms-array sirkuleer en by elke vorm die metode getSquare aanroep.

Aangesien elke vorm die koppelvlak Figure implementeer, kan ons 100% seker wees dat elke vorm hierdie metode getSquare sal hê.

So, hier is die implementering van die metode:

<?php class FiguresCollection { private $figures = []; public function addFigure(Figure $figure) { $this->figures[] = $figure; } // Laat ons die totale oppervlakte vind: public function getTotalSquare() { $sum = 0; foreach ($this->figures as $figure) { $sum += $figure->getSquare(); // gebruik die metode getSquare } return $sum; } } ?>

Sonder om na my kode te kyk, implementeer 'n soortgelyke klas FiguresCollection.

Voeg by die klas FiguresCollection die metode getTotalPerimeter by om die totale omtrek van alle vorms te vind.

Afrikaans
AzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ons gebruik koekies vir die werking van die webwerf, ontleding en personalisering. Die verwerking van data geskied volgens die Privaatheidsbeleid.
aanvaar alles instel verwerp