⊗ppOpIfInr 65 of 107 menu

Interfejsi u OOP u PHP-u

Kao što već znate, apstraktne klase predstavljaju skup metoda za svoje potomke. Deo ovih metoda može biti implementiran u samoj klasi, a deo metoda može biti deklarisan apstraktnim i zahtevati implementaciju u izvedenim klasama.

Zamislimo situaciju kada vaša apstraktna klasa predstavlja samo skup apstraktnih javnih metoda, bez dodavanja metoda sa implementacijom.

Zapravo, vaša roditeljska klasa opisuje interfejs potomaka, odnosno skup njihovih javnih metoda, obaveznih za implementaciju.

Zašto nam je ovo potrebno: da bismo prilikom programiranja pravili manje grešaka - opisavši sve neophodne metode u roditeljskoj klasi, možemo biti sigurni u to da će ih svi potomci zaista implementirati.

Kada će ovo pomoći: recimo da kreiramo našu roditeljsku klasu i nekoliko potomaka za nju. Ako kasnije, na primer, posle mesec dana, odlučimo da kreiramo još jednog potomka, sigurno ćemo već zaboraviti detalje našeg koda i lako možemo zaboraviti da napišemo implementaciju nekog metoda u novom potomku. Međutim, sam PHP neće dozvoliti da se metod izgubi - i jednostavno će prijaviti grešku.

Isto se odnosi na drugog programera, koji radi na vašem projektu. Neka je kod roditeljske klase napisao vi, a zatim vaš kolega odluči da kreira još jednog potomka. Vaš kolega takođe neće moći da izgubi nekoliko metoda.

Međutim, postoji problem: zapravo, napravili smo našu roditeljsku klasu da bismo u njoj pisali apstraktne javne metode, ali mi sami ili naš kolega imamo mogućnost da slučajno dodamo u ovu klasu metod koji nije javni ili nije apstraktan.

Recimo da želimo da fizički zabranimo pravljenje bilo kakvih drugih metoda u roditelju, osim apstraktnih javnih. U PHP-u, umesto apstraktnih klasa, možemo koristiti interfejse.

Interfejsi predstavljaju klase kod kojih su svi metodi javni i nemaju implementaciju. Kod metoda moraju implementirati klase koje nasleđuju (realizuju) interfejse.

Interfejsi se deklarišu na isti način kao i obične klase, ali koristeći ključnu reč interface umesto reči class.

Za nasleđivanje od interfejsa koristi se malo druga terminologija: kaže se da klase ne nasleđuju od interfejsa, već ih realizuju. Prema tome, umesto reči extends treba koristiti ključnu reč implements.

Ne može se kreirati objekat interfejsa. Svi metodi interfejsa moraju biti deklarisani kao public i ne smeju imati implementaciju. Interfejs može imati samo metode, ali ne i svojstva (properties). Takođe se ne može napraviti interfejs i klasa sa istim imenom.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij