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 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 abstraiteEmployeequi sert de fondation à tous les types d’employés. Elle doit avoir les propriétés protégées$nameet$salary. Le constructeur accepte les deux valeurs et les définit. Incluez une méthodegetName()qui renvoie le nom, une méthodegetSalary()qui renvoie le salaire, ainsi qu’une méthode abstraitecalculateBonus()que les classes enfants doivent implémenter. Ajoutez également une méthodegetSummary()qui renvoie"[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 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 : utilisezparent::__construct()pour les deux premiers, puis définissez vous-même le pourcentage. ImplémentezcalculateBonus()pour renvoyer le salaire multiplié par le pourcentage de prime, divisé par 100.Developer.php: définissez une classeDeveloperqui étendEmployee. 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 : utilisezparent::__construct()pour les deux premiers, puis définissez vous-même la prime de projet. ImplémentezcalculateBonus()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 unManageret unDeveloperavec 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
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses et objetsLe mot-clé $thisMéthodesPropriétésConstructeur (__construct)Destructeur (__destruct)Récapitulatif - Calculatrice simple4Héritage
Héritage de baseLe mot-clé parent::Redéfinition des méthodesLe mot-clé finalClasses abstraitesRécapitulatif – Hiérarchie des employés7Encapsulation
Public, Protected, PrivateModificateurs d’accès en profondeurAccesseurs et mutateursDissimulation de l’informationPromotion des constructeurs (8.0)Récapitulatif – Système de fiches étudiant10Concepts avancés de la POO
Composition ou héritageInjection de dépendancesClasses anonymesÉnumérations (PHP 8.1)Fibres (PHP 8.1)Approfondissement du clonage d’objetsGénérateurs et itérateurs13Patrons de conception – Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron CompositePatron Dépôt2Espaces de noms et chargement automatique
Introduction aux espaces de nomsLe mot-clé useNorme de chargement automatique PSR-4Autoloader de ComposerRécapitulatif - Projet organisé5Interfaces et contrats
Introduction aux interfacesImplémentation des interfacesImplémentation de plusieurs interfacesInterface ou classe abstraiteIndication de type avec les interfacesRécapitulatif - Calculateur de formes8Méthodes magiques
Introduction aux méthodes magiques__toString et __debugInfo__get, __set, __isset, __unset__call et __callStatic__clone et clonage d’objets__serialize et __unserializeRécapitulatif - Collection personnalisée3Propriétés de classe
Propriétés d’instance vs statiquesConstantes dans les classesMéthodes et propriétés statiquesPropriétés privées et protégéesPropriétés en lecture seule (PHP 8.1)Récapitulatif - Gestionnaire de comptes bancaires6Polymorphisme
Révision de la redéfinition des méthodesPolymorphisme via les interfacesAnnotations de type et types unionLiaison statique tardiveRécapitulatif - Processeur de paiements9Traits
Introduction aux traitsUtilisation de plusieurs traitsRésolution des conflits entre traitsMéthodes abstraites dans les traitsTraits par rapport à l’héritage12Patrons de conception – Partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron StrategyEntraînez-vous par vous-même : Compilateur PHP en ligne