⊗ppOpIfInr 65 of 107 menu

Интерфејси у ООП у PHP

Као што већ знате, апстрактне класе представљају скуп метода за своје потомке. Део ових метода може бити имплементиран у самој класи, а део метода може бити декларисан апстрактним и захтевати имплементацију у изведеним класама.

Замислимо ситуацију када ваша апстрактна класа представља само скуп апстрактних јавних метода, не додајући методе са имплементацијом.

Заправо ваша родитељска класа описује интерфејс потомака, односно скуп њихових јавних метода, обавезних за имплементацију.

Зашто нам то треба: да бисмо приликом програмирања правили мање грешака - описавши све потребне методе у класи-родитељу, можемо бити сигурни у то да сви потомци их заиста имплементирају.

Када ће ово помоћи: рецимо да креирамо нашу класу-родитеља и неколико потомака уз њу. Ако потом после неког времена, на пример, месец дана, одлучимо да креирамо још једног потомка, сигурно ћемо већ заборавити детаље нашег кода и сасвим можемо заборавити да напишемо имплементацију неког метода у новом потомку. Међутим, сам PHP неће дозволити да се метод изгуби - и једноставно ће пријавити грешку.

Исто важи и за другог програмера, који ради на вашем пројекту. Рецимо да сте код класе-родитеља писали ви, а затим ваш колега одлучи да креира још једног потомка. Ни ваш колега неће моћи да изгуби пар метода.

Постоји, међутим, проблем: заправо смо направили нашу класу-родитеља зато да бисмо писали у њој апстрактне јавне методе, али ми сами или наш колега имамо могућност случајно да додамо у ову класу нејавни метод или неапстрактни.

Рецимо да желимо физички да забранимо прављење у родитељу других метода, осим апстрактних јавних. У PHP за то уместо апстрактних класа можемо користити интерфејсе.

Интерфејси представљају класе код којих су сви методи јавни и који немају имплементацију. Код метода морају имплементирати класе-потомци интерфејса.

Интерфејси се декларишу на исти начин као и обичне класе, али користећи кључну реч interface уместо речи class.

За наслеђивање од интерфејса користи се мало другачија терминологија: каже се да класе не наслеђују од интерфејса, већ их имплементирају. Сходно томе уместо речи extends треба користити кључну реч implements.

Не може се креирати објекат интерфејса. Сви методи интерфејса морају бити декларисани као public и не смеју имати имплементацију. Интерфејс може имати само методе, али не и својства. Такође се не може направити интерфејс и класа са истим именом.

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