⊗ppOpIfAp 68 of 107 menu

Примена на интерфејси во ООП во PHP

Значи, веќе утврдивме дека интерфејсите се добар начин да се контролира тоа што се имплементирани сите потребни методи на класата.

Ајде да разгледаме уште еден, поконкретен, пример. Нека имаме класа што ќе чува низа од објекти-форми:

<?php class FiguresCollection { private $figures = []; // низа за форми } ?>

Да ја имплементираме во нашата класа методот addFigure за додавање на објекти во колекцијата:

<?php class FiguresCollection { private $figures = []; // Како параметар се пренесува објект со форма: public function addFigure($figure) { $this->figures[] = $figure; } } ?>

Очигледно е дека ние сметаме на тоа дека како параметар на методот addFigure ќе се пренесува објект со форма. Сепак, нема никаква контрола за тоа!

Ајде да користиме насока за типови и експлицитно да го означиме типот на објектите како Figure:

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

Ајде да го разбереме она што го направивме.

Ако Figure беше реално постоечка класа, тогаш во параметарот на методот би можеле да пренесеме објекти од таа класа, како и нејзините наследници.

Кај нас, сепак, Figure е интерфејс. Во таков случај, насоката означува дека како параметар на методот може да се пренесат само објекти од класа што го имплементира нашиот интерфејс.

Ајде да се обидеме да создадеме објект од нашата класа и да додадеме форми во него:

<?php $figuresCollection = new FiguresCollection; // Ќе додадеме неколку квадрати: $figuresCollection->add(new Quadrate(2)); $figuresCollection->add(new Quadrate(3)); // Ќе додадеме неколку правоаголници: $figuresCollection->add(new Rectangle(2, 3)); $figuresCollection->add(new Rectangle(3, 4)); ?>

Обидот за додавање на објект од која било друга класа ќе резултира со грешка:

<?php $figuresCollection = new FiguresCollection; class Test {}; // некоја друга класа $figuresCollection->add(new Test); // ќе даде грешка ?>

Што во пракса ни дава таква контрола: бидејќи сите форми, додадени во колекцијата, го имплементираат интерфејсот Figure, можеме да бидеме сигурни дека секоја од нив ќе има метод getSquare и метод getPerimeter.

Можно е во иднина покрај квадрат и правоаголник да се појави, на пример, уште и триаголник. Во тој случај и кај триаголникот ќе има методи getSquare и getPerimeter.

Во пракса ова ни го дава следново: можеме во класата FiguresCollection да направиме, на пример, метод getTotalSquare, кој ќе ја наоѓа вкупната плоштина на формите во колекцијата. Во овој метод ќе ја прелистуваме низата со форми со циклус и кај секоја форма ќе го повикуваме методот getSquare.

Бидејќи секоја форма го имплементира интерфејсот Figure, можеме да бидеме 100% сигурни во тоа дека секоја форма ќе го има овој метод getSquare.

Значи, еве ја имплементацијата на методот:

<?php class FiguresCollection { private $figures = []; public function addFigure(Figure $figure) { $this->figures[] = $figure; } // Ќе ја најдеме вкупната плоштина: public function getTotalSquare() { $sum = 0; foreach ($this->figures as $figure) { $sum += $figure->getSquare(); // го користиме методот getSquare } return $sum; } } ?>

Без да го ѕиркате мојот код, имплементирајте ја истата класа FiguresCollection.

Додадете во класата FiguresCollection метод getTotalPerimeter за наоѓање на вкупниот периметар на сите форми.

Македонски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние користиме колачиња за работата на веб-страната, анализа и персонализација. Обработката на податоци се врши во согласност со Политиката за приватност.
прифати ги сите прилагоди одбиј