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 d'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 posséder, puis l'étendre avec des types d'employés spécialisés qui calculent les bonus différemment.

Vous organiserez votre code sur quatre fichiers :

  • Employee.php — Définissez une classe abstraite Employee qui sert de fondation pour tous les types d'employés. Elle doit avoir des propriétés protégées $name et $salary. Le constructeur accepte les deux valeurs et les initialise. Incluez une méthode getName() qui retourne le nom, une méthode getSalary() qui retourne le salaire, et une méthode abstraite calculateBonus() que les classes enfants doivent implémenter. Ajoutez également une méthode getSummary() qui retourne "[name] earns $[salary] with bonus: $[bonus]"[bonus] est le résultat de l'appel à calculateBonus().
  • Manager.php — Définissez une classe Manager qui étend Employee. Incluez le fichier Employee en haut. Les managers reçoivent un bonus basé sur un pourcentage. Ajoutez une propriété protégée $bonusPercentage. Le constructeur doit accepter le nom, le salaire et le pourcentage de bonus — utilisez parent::__construct() pour les deux premiers, puis définissez le pourcentage vous-même. Implémentez calculateBonus() pour retourner le salaire multiplié par le pourcentage de bonus divisé par 100.
  • Developer.php — Définissez une classe Developer qui étend Employee. Incluez le fichier Employee en haut. Les développeurs reçoivent un bonus fixe de fin de projet. Ajoutez une propriété protégée $projectBonus. Le constructeur doit accepter le nom, le salaire et le montant du bonus de projet — utilisez parent::__construct() pour les deux premiers, puis définissez le bonus de projet vous-même. Implémentez calculateBonus() pour retourner simplement le montant fixe du bonus de projet.
  • main.php — Incluez les fichiers Manager et Developer. Vous recevrez cinq entrées : le nom du manager, le salaire du manager, le pourcentage de bonus du manager, le nom du développeur, le salaire du développeur et le bonus de projet du développeur. Créez un Manager et un Developer avec ces valeurs. Affichez le résultat de l'appel à getSummary() sur le manager d'abord, puis sur le développeur, chacun sur sa propre ligne.

Ce défi démontre comment les classes abstraites imposent un contrat — chaque employé doit être capable de calculer son bonus, 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 partagée getSummary() dans la classe parente fonctionne parfaitement avec l'un ou l'autre calcul de bonus 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 développeur

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

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

Toutes les leçons de Programmation Orientée Objet