⊗ppOpFnMt 64 of 107 menu

Metody abstrakcyjne w OOP w PHP

Klasy abstrakcyjne mogą również zawierać metody abstrakcyjne. Takie metody nie powinny mieć implementacji, a są potrzebne do wskazania, że takie metody powinny być u potomków. A właściwa implementacja takich metod - to już zadanie potomków.

Aby zadeklarować metodę jako abstrakcyjną, przy jej deklaracji należy napisać słowo kluczowe abstract.

Spróbujmy w praktyce. Załóżmy, że zakłada się, iż wszyscy potomkowie klasy User powinni mieć metodę increaseRevenue.

Ta metoda powinna brać bieżący dochód użytkownika i zwiększać go o pewną wartość, przekazaną parametrem.

Sama klasa User nie wie, jaki dokładnie dochód będzie miał potomek - przecież u pracownika to wynagrodzenie, a u studenta - stypendium. Dlatego każdy potomek będzie implementował tę metodę na swój sposób.

Sedno sprawy jest takie, że metoda abstrakcyjna klasy User zmusza programistę do zaimplementowania tej metody u potomków, inaczej PHP zwróci błąd. W ten sposób ty, lub inny programista, pracujący z twoim kodem, w żaden sposób nie będzie mógł zapomnieć o zaimplementowaniu potrzebnej metody u potomka.

Zatem, spróbujmy w praktyce. Dodajmy metodę abstrakcyjną increaseRevenue do klasy User:

<?php abstract class User { private $name; public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } // Metoda abstrakcyjna bez ciała: abstract public function increaseRevenue($value); } ?>

Niech nasza klasa Employee na razie pozostanie bez zmian. W tym przypadku, nawet jeśli nie tworzyć obiektu klasy Employee, a po prostu uruchomić kod, w którym definiowane są nasze klasy, - PHP zwróci błąd.

Teraz napiszmy implementację metody increaseRevenue w klasie Employee:

<?php class Employee extends User { private $salary; public function getSalary() { return $this->salary; } public function setSalary($salary) { $this->salary = $salary; } // Napiszmy implementację metody: public function increaseRevenue($value) { $this->salary = $this->salary + $value; } } ?>

Sprawdźmy działanie naszej klasy:

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

Zaimplementujmy metodę increaseRevenue i w klasie Student. Tylko teraz nasza metoda będzie zwiększać już stypendium:

<?php class Student extends User { private $scholarship; // stypendium public function getScholarship() { return $this->scholarship; } public function setScholarship($scholarship) { $this->scholarship = $scholarship; } // Metoda zwiększa stypendium: public function increaseRevenue($value) { $this->scholarship = $this->scholarship + $value; } } ?>

Dodaj do swojej klasy User taką samą metodę abstrakcyjną increaseRevenue. Napisz implementację tej metody w klasach Employee i Student.

W klasie Figure zrób abstrakcyjne metody do uzyskiwania pola i obwodu figury.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć