⊗ppOpFnMt 64 of 107 menu

Absztrakt metódusok az OOP-ban PHP-ben

Az absztrakt osztályok tartalmazhatnak absztrakt metódusokat is. Az ilyen metódusoknak nem szabad implementációval rendelkezniük, hanem azért szolgálnak, hogy jelezzék, hogy az ilyen metódusoknak a leszármazottaknál is jelen kell lenniük. Maguknak az ilyen metódusok implementálása már a leszármazottak feladata.

Ahhoz, hogy egy metódust absztraktnak nyilvánítsunk, a deklarációjakor a abstract kulcsszót kell használni.

Próbáljuk ki a gyakorlatban. Tegyük fel, hogy az összes User osztályból származó osztálynak rendelkeznie kell egy increaseRevenue metódussal.

Ennek a metódusnak a felhasználó jelenlegi jövedelmét kell vennie, és egy paraméterként átadott értékkel növelnie kell azt.

Maga a User osztály nem tudja, hogy a leszármazott pontosan milyen jövedelemmel fog rendelkezni - hiszen egy alkalmazott esetében ez a fizetés, egy diák esetében pedig az ösztöndíj. Ezért minden leszármazott saját módon fogja implementálni ezt a metódust.

A lényeg az, hogy a User osztály absztrakt metódusa kényszeríti a programozót, hogy implementálja ezt a metódust a leszármazottakban, különben a PHP hibát jelez. Így te, vagy egy másik programozó, aki a kódoddal dolgozik, esélye sem lesz elfelejteni a szükséges metódus implementálását a leszármazottban.

Nos, próbáljuk ki a gyakorlatban. Adjuk hozzá az increaseRevenue absztrakt metódust a User osztályhoz:

<?php abstract class User { private $name; public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } // Absztrakt metódus implementáció nélkül: abstract public function increaseRevenue($value); } ?>

Tegyük fel, hogy a Employee osztályunk egyelőre változatlan marad. Ebben az esetben, még ha nem is hozunk létre Employee osztályú objektumot, hanem csak futtatjuk az osztályainkat definiáló kódot, - a PHP hibát fog jelezni.

Most írjuk meg a increaseRevenue metódus implementációját a Employee osztályban:

<?php class Employee extends User { private $salary; public function getSalary() { return $this->salary; } public function setSalary($salary) { $this->salary = $salary; } // Írjuk meg a metódus implementációját: public function increaseRevenue($value) { $this->salary = $this->salary + $value; } } ?>

Ellenőrizzük az osztályunk működését:

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

Implementáljuk a increaseRevenue metódust a Student osztályban is. Csak most a metódusunk az ösztöndíjat fogja növelni:

<?php class Student extends User { private $scholarship; // ösztöndíj public function getScholarship() { return $this->scholarship; } public function setScholarship($scholarship) { $this->scholarship = $scholarship; } // A metódus növeli az ösztöndíjat: public function increaseRevenue($value) { $this->scholarship = $this->scholarship + $value; } } ?>

Adja hozzá a User osztályához ugyanezt az absztrakt increaseRevenue metódust. Írja meg ennek a metódusnak az implementációját a Employee és Student osztályokban.

A Figure osztályban készítsen absztrakt metódusokat az alakzat területének és kerületének megkapásához.

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