Запіс на курсы па HTML, CSS, JavaScript, PHP, Python, фрэймворкам і CMS,
а таксама: дапамога ў пошуку працы і заказаў, стажыроўка на рэальных праектах→
⊗ppOpFnMt 64 of 107 menu

Абстрактыя метады ў ААП у PHP

Абстрактныя класы таксама могуць утрымліваць абстрактныя метады. Такія метады не павінны мець рэалізацыі, а патрэбныя для таго, каб паказаць, што такія метады павінны быць у нашчадкаў. А ўласна рэалізацыя такіх метадаў - ужо задача нашчадкаў.

Для таго, каб аб'явіць метад абстрактным, пры яго аб'яўленні варта напісаць ключавое слова abstract.

Давайце паспрабуем на практыцы. Хай мяркуецца, што ўсе нашчадкі класа User павінны мець метад increaseRevenue.

Гэты метад павінен браць бягучы даход карыстальніка і павялічваць яго на некаторую велічыню, перададзеную параметрам.

Сам клас User не ведае, які менавіта даход будзе атрымліваць нашчаднік - бо ў работніка гэта заробная плата, а ў студэнта - стыпендыя. Таму кожны нашчадак будзе рэалізоўваць гэты метад па-свойму.

Сутнасць тут у тым, што абстрактны метад класа User прымушае праграміста рэалізоўваць гэты метад у нашчадкаў, інакш PHP выдас памылку. Такім чынам вы, ці іншы праграміст, які працуе з вашым кодам, ніяк не зможаце забыцца рэалізаваць патрэбны метад у нашчадку.

Такім чынам, давайце паспрабуем на практыцы. Дадамо абстрактны метад increaseRevenue у клас User:

<?php abstract class User { private $name; public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } // Абстрактны метад без цела: abstract public function increaseRevenue($value); } ?>

Хай наш клас Employee пакуль застанецца без зменаў. У гэтым выпадку, нават калі не ствараць аб'ект класа Employee, а проста запусціць код, у якім вызначаюцца нашы класы, - PHP выдас памылку.

Давайце цяпер напішам рэалізацыю метада increaseRevenue у класе Employee:

<?php class Employee extends User { private $salary; public function getSalary() { return $this->salary; } public function setSalary($salary) { $this->salary = $salary; } // Напішам рэалізацыю метада: public function increaseRevenue($value) { $this->salary = $this->salary + $value; } } ?>

Праверым працу нашага класа:

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

Рэалізуем метад increaseRevenue і у класе Student. Толькі цяпер наш метад будзе павялічваць ужо стыпендыю:

<?php class Student extends User { private $scholarship; // стыпендыя public function getScholarship() { return $this->scholarship; } public function setScholarship($scholarship) { $this->scholarship = $scholarship; } // Метад павялічвае стыпендыю: public function increaseRevenue($value) { $this->scholarship = $this->scholarship + $value; } } ?>

Дадайце ў ваш клас User такі ж абстрактны метад increaseRevenue. Напішыце рэалізацыю гэтага метада ў класах Employee і Student.

У класе Figure зрабіце абстрактныя метады для атрымання плошчы і перыметра фігуры.

byenru