⊗ppOpIfInr 65 of 107 menu

Interfészek az OOP-ben PHP-ben

Ahogy már tudod, az absztrakt osztályok metódusok gyűjteményét jelentik az utódaik számára. Ezen metódusok egy része megvalósítható maga az osztályban, míg más metódusok absztraktként deklarálhatók és megvalósítást igényelnek a leszármazott osztályokban.

Képzeljük el a helyzetet, amikor az absztrakt osztályod csupán absztrakt publikus metódusok gyűjteménye, anélkül, hogy megvalósított metódusokat adna hozzá.

Lényegében a szülői osztályod leírja az utódok interfészét, azaz az ő kötelezően megvalósítandó publikus metódusaik gyűjteményét.

Miért van erre szükségünk: hogy kevesebb hibát kövessünk el a programozás során - leírva az összes szükséges metódust a szülő osztályban, biztosak lehetünk benne, hogy az összes utód valóban megvalósítja azokat.

Mikor segít ez: tegyük fel, hogy létrehozzuk a mi szülő osztályunkat és néhány utódot hozzá. Ha később, például egy hónap múlva, úgy döntünk, hogy még egy utódot hozunk létre, biztosan elfelejtjük a kódunk részleteit és könnyen előfordulhat, hogy elfelejtünk megvalósítani egy-két metódust az új utódban. Azonban maga a PHP nem engedi, hogy a metódus elveszjen - és egyszerűen hibát jelez.

Ugyanez vonatkozik egy másik programozóra is, aki a projekteden dolgozik. Tegyük fel, hogy te írtad a szülő osztály kódját, majd egy kollégád úgy dönt, hogy még egy utódot hoz létre. A kollégádnak sem sikerül "elveszítenie" pár metódust.

Van azonban egy probléma: lényegében azért hoztuk létre a szülő osztályunkat, hogy abstrakt publikus metódusokat írjunk bele, de nekünk vagy a kollégánknak megvan a lehetősége, hogy véletlenül nem publikus vagy nem absztrakt metódust adjon hozzá ehhez az osztályhoz.

Tegyük fel, hogy fizikailag meg akarjuk tiltani, hogy a szülőben más metódusokat lehessen csinálni, mint absztrakt publikusakat. A PHP-ben ehhez az absztrakt osztályok helyett interfészeket lehet használni.

Az interfészek olyan osztályok, amelyeknek minden metódusa publikus és nincs megvalósításuk. A metódusok kódját az interfészek leszármazott osztályainak kell megvalósítaniuk.

Az interfészek ugyanúgy deklarálhatók, mint a szokásos osztályok, de a class szó helyett a interface kulcsszót használva.

Az interfészektől való örökléshez egy kicsit más terminológiát használunk: azt mondják, hogy az osztályok nem örökölnek az interfészektől, hanem megvalósítják azokat. Ennek megfelelően a extends szó helyett a implements kulcsszót kell használni.

Nem lehet létrehozni egy interfész objektumát. Az interfész összes metódusát public-ként kell deklarálni, és nem lehet megvalósításuk. Egy interfésznek csak metódusai lehetnek, nem tulajdonságai. Nem lehet interfészt és osztályt egyazon névvel létrehozni sem.

Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás