⊗ppOpFnMt 64 of 107 menu

Abstraktní metody v OOP v PHP

Abstraktní třídy mohou také obsahovat abstraktní metody. Takové metody by neměly mít implementaci, ale slouží k tomu, aby určily, že takové metody musí mít potomci. A vlastní implementace těchto metod - je již úkolem potomků.

Pro deklaraci abstraktní metody je třeba při její deklaraci napsat klíčové slovo abstract.

Pojďme to vyzkoušet v praxi. Předpokládejme, že všichni potomci třídy User musí mít metodu increaseRevenue.

Tato metoda by měla vzít aktuální příjem uživatele a zvýšit jej o určitou hodnotu předanou parametrem.

Samotná třída User neví, jaký přesně příjem bude mít potomek - u zaměstnance je to plat, zatímco u studenta - stipendium. Proto každý potomek bude tuto metodu implementovat svým vlastním způsobem.

Podstata spočívá v tom, že abstraktní metoda třídy User nutí programátora implementovat tuto metodu v potomcích, jinak PHP vypíše chybu. Tímto způsobem vy, nebo jiný programátor, pracující s vaším kódem, nemůžete zapomenout implementovat požadovanou metodu v potomkovi.

Pojďme to tedy vyzkoušet v praxi. Přidejme abstraktní metodu increaseRevenue do třídy User:

<?php abstract class User { private $name; public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } // Abstraktní metoda bez těla: abstract public function increaseRevenue($value); } ?>

Nechme naši třídu Employee prozatím beze změn. V tomto případě, i když nevytváříme objekt třídy Employee, ale pouze spustíme kód, ve kterém jsou definovány naše třídy - PHP vypíše chybu.

Nyní napišme implementaci metody increaseRevenue ve třídě Employee:

<?php class Employee extends User { private $salary; public function getSalary() { return $this->salary; } public function setSalary($salary) { $this->salary = $salary; } // Napíšeme implementaci metody: public function increaseRevenue($value) { $this->salary = $this->salary + $value; } } ?>

Ověřme fungování naší třídy:

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

Implementujme metodu increaseRevenue i ve třídě Student. Tentokrát naše metoda bude zvyšovat již stipendium:

<?php class Student extends User { private $scholarship; // stipendium public function getScholarship() { return $this->scholarship; } public function setScholarship($scholarship) { $this->scholarship = $scholarship; } // Metoda zvyšuje stipendium: public function increaseRevenue($value) { $this->scholarship = $this->scholarship + $value; } } ?>

Přidejte do vaší třídy User stejnou abstraktní metodu increaseRevenue. Napište implementaci této metody ve třídách Employee a Student.

Ve třídě Figure vytvořte abstraktní metody pro získání obsahu a obvodu obrazce.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout