⊗ppOpFnMt 64 of 107 menu

Abstraktūs metodai OOP PHP

Abstraktūs klasės taip pat gali turėti abstrakčius metodus. Tokie metodai neturėtų turėti implementacijos, o reikalingi tam, kad nurodyti, kad tokie metodai turi būti palikuoniuose. O pati tokių metodų implementacija - jau palikuonių užduotis.

Norint paskelbti metodą abstrakčiu, prie jo deklaracijos reikia parašyti raktinį žodį abstract.

Pabandykime praktiškai. Tarkime, numatoma, kad visi klasės User palikuoniai turi turėti metodą increaseRevenue.

Šis metodas turi paimti esamas vartotojo pajamas ir padidinti jas tam tikru dydžiu, perduotu parametru.

Pati klasė User nežino, kokios tiksliai pajamas gaus palikuonis - juk darbuotojo atveju tai atlyginimas, o studento - stipendija. Todėl kiekvienas palikuonis implementuos šį metodą savaip.

Esmė ta, kad abstraktus klasės User metodas priverčia programuotoją implementuoti šį metodą palikuoniuose, kitaip PHP išmes klaidą. Taip jūs, ar kitas programuotojas, dirbantis su jūsų kodu, jokiu būdu negalėsite pamiršti implementuoti reikalingą metodą palikuonyje.

Taigi, pabandykime praktiškai. Pridėkime abstraktų metodą increaseRevenue į klasę User:

<?php abstract class User { private $name; public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } // Abstraktus metodas be kūno: abstract public function increaseRevenue($value); } ?>

Tegul mūsų klasė Employee kol kas lieka be pakeitimų. Tokiu atveju, net jei ne kurti klasės Employee objekto, o tik paleisti kodą, kuriame apibrėžiamos mūsų klasės, - PHP išmes klaidą.

Dabar parašykime metodo increaseRevenue implementaciją klasėje Employee:

<?php class Employee extends User { private $salary; public function getSalary() { return $this->salary; } public function setSalary($salary) { $this->salary = $salary; } // Parašykime metodo implementaciją: public function increaseRevenue($value) { $this->salary = $this->salary + $value; } } ?>

Patikrinkime mūsų klasės veikimą:

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

Implementuokime metodą increaseRevenue ir klasėje Student. Tik dabar mūsų metodas padidins jau stipendiją:

<?php class Student extends User { private $scholarship; // stipendija public function getScholarship() { return $this->scholarship; } public function setScholarship($scholarship) { $this->scholarship = $scholarship; } // Metodas padidina stipendiją: public function increaseRevenue($value) { $this->scholarship = $this->scholarship + $value; } } ?>

Pridėkite į jūsų klasę User tokį patį abstraktų metodą increaseRevenue. Parašykite šio metodo implementaciją klasėse Employee ir Student.

Klasėje Figure padarykite abstrakčius metodus figūros ploto ir perimetro gavimui.

Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti