Menu
Coddy logo textTech

Récapitulatif – Hiérarchie des employés

Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy. Leçon 26 sur 91.

challenge icon

Défi

Facile

Construisons un système de hiérarchie des employés qui rassemble tous les concepts d’héritage que vous avez appris dans ce chapitre. Vous allez créer une classe de base abstraite qui définit ce que chaque employé doit avoir, puis l’étendre avec des types d’employés spécialisés qui calculent les primes différemment.

Vous organiserez votre code sur quatre fichiers :

  • Employee.php : définissez une classe abstraite Employee qui sert de fondation à tous les types d’employés. Elle doit avoir les propriétés protégées $name et $salary. Le constructeur accepte les deux valeurs et les définit. Incluez une méthode getName() qui renvoie le nom, une méthode getSalary() qui renvoie le salaire, ainsi qu’une méthode abstraite calculateBonus() que les classes enfants doivent implémenter. Ajoutez également une méthode getSummary() qui renvoie "[name] earns $[salary] with bonus: $[bonus]", où [bonus] est le résultat de l’appel à calculateBonus().
  • Manager.php : définissez une classe Manager qui étend Employee. Incluez le fichier Employee au début. Les responsables reçoivent une prime basée sur un pourcentage. Ajoutez une propriété protégée $bonusPercentage. Le constructeur doit accepter le nom, le salaire et le pourcentage de prime : utilisez parent::__construct() pour les deux premiers, puis définissez vous-même le pourcentage. Implémentez calculateBonus() pour renvoyer le salaire multiplié par le pourcentage de prime, divisé par 100.
  • Developer.php : définissez une classe Developer qui étend Employee. Incluez le fichier Employee au début. Les développeurs reçoivent une prime fixe pour l’achèvement d’un projet. Ajoutez une propriété protégée $projectBonus. Le constructeur doit accepter le nom, le salaire et le montant de la prime de projet : utilisez parent::__construct() pour les deux premiers, puis définissez vous-même la prime de projet. Implémentez calculateBonus() pour renvoyer simplement le montant fixe de la prime de projet.
  • main.php : incluez les fichiers Manager et Developer. Vous recevrez six entrées : le nom du responsable, le salaire du responsable, le pourcentage de prime du responsable, le nom du développeur, le salaire du développeur et la prime de projet du développeur. Créez un Manager et un Developer avec ces valeurs. Affichez d’abord le résultat de l’appel à getSummary() sur le responsable, puis celui de l’appel sur le développeur, chacun sur sa propre ligne.

Ce défi montre comment les classes abstraites imposent un contrat : chaque employé doit pouvoir calculer sa prime, mais la logique de calcul varie selon le rôle. Le Manager utilise un pourcentage de son salaire, tandis que le Developer reçoit un montant fixe. La méthode getSummary() partagée dans la classe parente fonctionne parfaitement avec l’un ou l’autre calcul de prime grâce au polymorphisme.

Essayez vous-même

<?php
require_once 'Manager.php';
require_once 'Developer.php';

// Lire les entrées
$managerName = trim(fgets(STDIN));
$managerSalary = floatval(trim(fgets(STDIN)));
$managerBonusPercentage = floatval(trim(fgets(STDIN)));
$developerName = trim(fgets(STDIN));
$developerSalary = floatval(trim(fgets(STDIN)));
$developerProjectBonus = floatval(trim(fgets(STDIN)));

// TODO: Créer un objet Manager avec les entrées du manager

// TODO: Créer un objet Developer avec les entrées du developer

// TODO: Afficher le résumé du manager (getSummary())

// TODO: Afficher le résumé du developer (getSummary())
?>

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur PHP en ligne