ВНИМАНИЕ: Запись на курсы по HTML, CSS, JavaScript, PHP, Python, React, Vue, Laravel и другим фреймворкам и CMS,
а также: помощь в поиске работы и заказов, стажировка на реальных проектах→
⊗ppOpFnMt 64 of 107 menu
Хочешь читать code.mu на своем родном языке? Помоги с переводом! Переведем мы сами, тебе нужно указать на ошибки перевода:) Оставляй заявку ->

Абстрактные методы в ООП в 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