⊗ppOpIfInr 65 of 107 menu

Rajapinnat OOP:ssa PHP:ssä

Kuten jo tiedät, abstraktit luokat edustavat joukkoa metodeja niiden jälkeläisille. Osa näistä metodeista voidaan toteuttaa itse luokassa, ja osa metodeista voidaan määritellä abstrakteiksi ja vaatia toteutusta lapsiluokissa.

Kuvittele tilanne, jossa abstrakti luokkasi edustaa vain joukkoa abstrakteja julkisia metodeja, lisäämättä metodeja toteutuksella.

Käytännössä vanhempiluokkasi kuvaa rajapintaa jälkeläisille, eli joukon niiden julkisia metodeja, jotka on pakollista toteuttaa.

Miksi tätä tarvitsemme: vähentääksemme virheitä ohjelmoinnissa - kuvaamalla kaikki tarvittavat metodit vanhempiluokassa, voimme olla varmoja, että kaikki jälkeläiset toteuttavat ne todella.

Milloin tämä auttaa: oletetaan, että luomme vanhempiluokkamme ja useita sen jälkeläisiä. Jos myöhemmin, esimerkiksi kuukauden kuluttua, päätämme luoda toisen jälkeläisen, olemme varmasti jo unohtaneet koodimme yksityiskohdat ja saatamme helposti unohtaa toteuttaa jonkin metodin uudessa jälkeläisessä. Kuitenkin PHP itse ei salli menetää metodia - ja antaa yksinkertaisesti virheen.

Sama koskee toista ohjelmoijaa, joka työskentelee projektisi parissa. Oletetaan, että vanhempiluokan koodin kirjoitit sinä, ja sitten kollegasi päätti luoda toisen jälkeläisen. Myöskään kollegallasi ei onnistu menettää pari metodia.

On kuitenkin ongelma: käytännössä teimme vanhempiluokkamme siksi, että voisimme kirjoittaa siihen abstrakteja julkisia metodeja, mutta me itsemme tai kolleganne voimme vahingossa lisätä tähän luokkaan ei-julkinen metodin tai ei-abstraktin.

Oletetaan, että haluamme fyysisesti kieltää tekemästä vanhemmassa muita metodeja kuin abstrakteja julkisia. PHP:ssä tätä varten abstraktien luokkien sijasta voidaan käyttää rajapintoja.

Rajapinnat edustavat luokkia, joiden kaikki metodit ovat julkisia eikä niillä ole toteutusta. Metodien koodin tulee toteuttaa rajapintojen jälkeläisluokat.

Rajapinnat ilmoitetaan samalla tavalla kuin tavalliset luokat, mutta käyttämällä avainsanaa interface sanan class sijasta.

Rajapinnoista periytymiseen käytetään hieman erilaista terminologiaa: sanotaan, että luokat eivät peri rajapinnoista, vaan toteuttavat ne. Vastaavasti sanan extends sijasta tulee käyttää avainsanaa implements.

Rajapinnan oliota ei voi luoda. Kaikkien rajapinnan metodien tulee olla määritelty public eikä niillä saa olla toteutusta. Rajapinnalla voi olla vain metodeja, ei ominaisuuksia. Myöskään rajapintaa ja luokkaa ei voi tehdä samalla nimellä.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää