⊗ppOpIfII 74 of 107 menu

Luokan perintä ja rajapinnan toteutus OOP:ssa PHP:ssä

Luokka voi periä toisesta luokasta ja samalla toteuttaa jotain rajapintaa. Tarkastellaan käytännön esimerkillä.

Oletetaan, että haluamme tehdä luokan Programmer, jolla on nimi, palkka ja lista kielistä, joita ohjelmoija osaa. Tällä hetkellä luokkamme kuvaus on melko epämääräinen: kyllä, luokassa on nimi, palkka, kielet - mutta mitkä metodit luokassamme tulevat olemaan?

Kuvataan luokkaamme tarkemmin rajapinnan iProgrammer avulla:

<?php interface iProgrammer { public function __construct($name, $salary); public function getName(); public function getSalary(); public function getLangs(); public function addLang($lang); } ?>

Oletetaan, että olemme kaivautuneet jo toteuttamiemme luokkien joukkoon ja, kääntääkö, meillä on jo samankaltainen luokka Employee. Se ei toteuta kaikkia luokan Programmer metodeja, mutta osan. Tässä on koodi jo olemassa olevasta luokastamme:

<?php class Employee { private $name; private $salary; public function __construct($name, $salary) { $this->name = $name; $this->salary = $salary; } public function getName() { return $this->name; } public function getSalary() { return $this->salary; } } ?>

On loogista tehdä niin, että uusi luokkamme Programmer perii osan tarvitsemistaan metodeista luokasta Employee (ja osan toteutamme myöhemmin uudessa luokassa):

<?php class Programmer extends Employee { } ?>

Samalla tiedämme, että luokan Pogrammer tulee toteuttaa rajapinta iProgrammer:

<?php class Programmer implements iProgrammer { } ?>

Yhdistetään luokan Employee perintä ja rajapinnan iProgrammer toteutus:

<?php class Programmer extends Employee implements iProgrammer { } ?>

Saamme siis sen, että luokkamme Pogrammer perii luokalta Employee metodit __construct, getName ja getSalary, ja metodit addLang ja getLangs meidän on toteutettava itse:

<?php class Programmer extends Employee implements iProgrammer { public function addLang($lang) { // toteutus } public function getLangs() { // toteutus } } ?>

Rajapinnalle iProgrammer ei ole väliä, ovatko metodit luokan omia vai perittyjä - tärkeintä on, että kaikki kuvatut metodit ovat toteutettuna.

Kopioi luokkani Employee koodi ja rajapinnan iProgrammer koodi. Älä kopio luokan Programmer aihiota - toteuta tämä luokka itse katsomatta koodiini.

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ää