Méthodes abstraites en POO en PHP
Les classes abstraites peuvent également contenir des méthodes abstraites. De telles méthodes ne doivent pas avoir d'implémentation, mais sont nécessaires pour indiquer que de telles méthodes doivent être présentes dans les classes descendantes. Et proprement dite, l'implémentation de ces méthodes est déjà la tâche des classes descendantes.
Pour déclarer une méthode comme abstraite,
lors de sa déclaration, il faut écrire le mot-clé
abstract.
Essayons en pratique. Supposons
que toutes les classes descendantes de la classe User doivent
avoir une méthode increaseRevenue.
Cette méthode doit prendre le revenu actuel de l'utilisateur et l'augmenter d'une certaine valeur, transmise en paramètre.
La classe User elle-même ne sait pas quel exactement
revenu l'héritier recevra - après tout, pour un employé
c'est un salaire, et pour un étudiant - une bourse. Par conséquent,
chaque classe descendante implémentera cette méthode
à sa manière.
L'essence ici est que la méthode abstraite de la classe
User oblige le programmeur à implémenter
cette méthode dans les classes descendantes, sinon PHP générera une erreur.
Ainsi, vous, ou un autre programmeur,
travaillant avec votre code,
ne pourrez en aucun cas
oublier d'implémenter la méthode nécessaire
dans la classe descendante.
Alors, essayons en pratique. Ajoutons
une méthode abstraite increaseRevenue
dans la classe User :
<?php
abstract class User
{
private $name;
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name = $name;
}
// Méthode abstraite sans corps :
abstract public function increaseRevenue($value);
}
?>
Supposons que notre classe Employee reste pour l'instant
sans changements. Dans ce cas, même si on ne
crée pas d'objet de la classe Employee,
mais qu'on exécute simplement le code dans lequel nos classes
sont définies, - PHP générera une erreur.
Écrivons maintenant l'implémentation de la méthode
increaseRevenue dans la classe
Employee :
<?php
class Employee extends User
{
private $salary;
public function getSalary()
{
return $this->salary;
}
public function setSalary($salary)
{
$this->salary = $salary;
}
// Écrivons l'implémentation de la méthode :
public function increaseRevenue($value)
{
$this->salary = $this->salary + $value;
}
}
?>
Vérifions le fonctionnement de notre classe :
<?php
$employee = new Employee;
$employee->setName('john');
$employee->setSalary(1000);
$employee->increaseRevenue(100);
echo $employee->getSalary();
?>
Implémentons la méthode increaseRevenue
dans la classe Student. Seulement maintenant, notre
méthode augmentera la bourse :
<?php
class Student extends User
{
private $scholarship; // bourse
public function getScholarship()
{
return $this->scholarship;
}
public function setScholarship($scholarship)
{
$this->scholarship = $scholarship;
}
// La méthode augmente la bourse :
public function increaseRevenue($value)
{
$this->scholarship = $this->scholarship + $value;
}
}
?>
Ajoutez à votre classe User la même
méthode abstraite increaseRevenue.
Écrivez l'implémentation de cette méthode dans les classes
Employee et Student.
Dans la classe Figure, créez des méthodes
abstraites pour obtenir l'aire et le périmètre de la figure.