⊗ppOpFnMt 64 of 107 menu

Abstraktiset menetelmät OOP:ssa PHP:ssä

Abstraktit luokat voivat sisältää myös abstrakteja menetelmiä. Tällaisilla menetelmillä ei saa olla toteutusta, vaan ne on tarkoitettu osoittamaan, että jälkeläisillä tulee olla tällaisia menetelmiä. Itse asiassa näiden menetelmien toteuttaminen on jälkeläisten tehtävä.

Jotta menetelmä voidaan määritellä abstraktiksi, siihen tulee kirjoittaa avainsana abstract sen määrittelyn yhteydessä.

Kokeillaan käytännössä. Oletetaan, että kaikkien luokan User jälkeläisten tulee omata menetelmä increaseRevenue.

Tämän menetelmän tulee ottaa käyttäjän nykyiset tulot ja kasvattaa niitä tietyn parametrina annetun määrän verran.

Itse luokka User ei tiedä, mitä tuloja jälkeläinen saa - työntekijällä on palkka, kun taas opiskelijalla on stipendi. Siksi jokainen jälkeläinen toteuttaa tämän menetelmän omalla tavallaan.

Pointti on siinä, että luokan User abstrakti menetelmä pakottaa ohjelmoijan toteuttamaan tämän menetelmän jälkeläisissä, muuten PHP antaa virheen. Näin sinä, tai toinen ohjelmoija, joka työskentelee koodisi kanssa, ei voi millään tavalla unohtaa toteuttaa tarvittavaa menetelmää jälkeläisessä.

Kokeillaan siis käytännössä. Lisätään abstrakti menetelmä increaseRevenue luokkaan User:

<?php abstract class User { private $name; public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } // Abstrakti menetelmä ilman runkoa: abstract public function increaseRevenue($value); } ?>

Olkoon luokkamme Employee toistaiseksi muuttumaton. Tässä tapauksessa, vaikka ei luotaisi luokan Employee oliota, vaan vain suoritettaisiin koodi, jossa määritellään luokkamme, - PHP antaa virheen.

Kirjoitetaan nyt menetelmän increaseRevenue toteutus luokassa Employee:

<?php class Employee extends User { private $salary; public function getSalary() { return $this->salary; } public function setSalary($salary) { $this->salary = $salary; } // Kirjoitetaan menetelmän toteutus: public function increaseRevenue($value) { $this->salary = $this->salary + $value; } } ?>

Testataan luokkamme toimintaa:

<?php $employee = new Employee; $employee->setName('john'); $employee->setSalary(1000); $employee->increaseRevenue(100); echo $employee->getSalary(); ?>

Toteutetaan menetelmä increaseRevenue myös luokassa Student. Nyt menetelmämme kasvattaa stipendiä:

<?php class Student extends User { private $scholarship; // stipendi public function getScholarship() { return $this->scholarship; } public function setScholarship($scholarship) { $this->scholarship = $scholarship; } // Menetelmä kasvattaa stipendiä: public function increaseRevenue($value) { $this->scholarship = $this->scholarship + $value; } } ?>

Lisää luokkaasi User samanlainen abstrakti menetelmä increaseRevenue. Kirjoita tämän menetelmän toteutus luokkiin Employee ja Student.

Tee luokassa Figure abstraktit menetelmät kuvion pinta-alan ja kehän saamiseksi.

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