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.
Défi
FacileConstruisons 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 abstraiteEmployeequi sert de fondation pour tous les types d'employés. Elle doit avoir des propriétés protégées$nameet$salary. Le constructeur accepte les deux valeurs et les initialise. Incluez une méthodegetName()qui retourne le nom, une méthodegetSalary()qui retourne le salaire, et une méthode abstraitecalculateBonus()que les classes enfants doivent implémenter. Ajoutez également une méthodegetSummary()qui retourne"[name] earns $[salary] with bonus: $[bonus]"où[bonus]est le résultat de l'appel àcalculateBonus().Manager.php— Définissez une classeManagerqui étendEmployee. 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 — utilisezparent::__construct()pour les deux premiers, puis définissez le pourcentage vous-même. ImplémentezcalculateBonus()pour retourner le salaire multiplié par le pourcentage de bonus divisé par 100.Developer.php— Définissez une classeDeveloperqui étendEmployee. 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 — utilisezparent::__construct()pour les deux premiers, puis définissez le bonus de projet vous-même. ImplémentezcalculateBonus()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 unManageret unDeveloperavec 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
1Les bases de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe mot-clé $thisMéthodesPropriétésConstructeur (__construct)Destructeur (__destruct)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLe mot-clé parent::Redéfinition de méthodeLe mot-clé finalClasses abstraitesRécapitulatif - Hiérarchie des employés7Encapsulation
Public, Protégé, PrivéModificateurs d'accès en détailGetters et SettersMasquage d'informationPromotion de constructeur (8.0)Récapitulatif - Système de gestion d'étudiants10Concepts avancés de la POO
Composition vs HéritageInjection de dépendancesClasses anonymesÉnumérations (PHP 8.1)Fibers (PHP 8.1)Clonage d'objets : analyse approfondieGénérateurs et Itérateurs13Patrons de conception Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode ModèlePatron ÉtatPatron CompositePatron Repository2Espaces de noms et Autoloading
Introduction aux espaces de nomsLe mot-clé useStandard d'Autoloading PSR-4L'Autoloader ComposerRécapitulatif - Projet organisé5Interfaces et Contrats
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesInterface vs Classe AbstraiteType Hinting avec les InterfacesRécapitulatif - Calculateur de Formes8Méthodes magiques
Introduction aux méthodes magiques__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Clonage d'objets__serialize & __unserializeRécapitulatif - Collection personnalisée3Propriétés de classe
Propriétés d'instance vs Propriétés statiquesConstantes dans les classesMéthodes et propriétés statiquesPropriétés privées et protégéesPropriétés readonly (PHP 8.1)Récapitulatif - Gestionnaire de compte bancaire6Polymorphisme
Retour sur la redéfinition de méthodePolymorphisme via les interfacesType Hinting et Types d'unionLiaison statique tardiveRécapitulatif - Processeur de paiement9Traits
Introduction aux TraitsUtilisation de plusieurs TraitsRésolution des conflits de TraitsMéthodes abstraites dans les TraitsTraits vs Héritage12Patrons de conception Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron ObservateurPatron Stratégie