Zusammenfassung – Mitarbeiter-Hierarchie
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy — Lektion 26 von 91.
Aufgabe
EinfachLassen Sie uns ein Mitarbeiter-Hierarchiesystem aufbauen, das alle Vererbungskonzepte zusammenführt, die Sie in diesem Kapitel gelernt haben. Sie erstellen eine abstrakte Basisklasse, die definiert, was jeder Mitarbeiter haben muss, und erweitern diese dann um spezialisierte Mitarbeitertypen, die Boni unterschiedlich berechnen.
Sie werden Ihren Code über vier Dateien organisieren:
Employee.php— Definieren Sie eine abstrakteEmployee-Klasse, die als Grundlage für alle Mitarbeitertypen dient. Sie sollte die geschützten Eigenschaften$nameund$salaryhaben. Der Konstruktor akzeptiert beide Werte und setzt diese. Fügen Sie einegetName()-Methode hinzu, die den Namen zurückgibt, einegetSalary()-Methode, die das Gehalt zurückgibt, und eine abstrakte MethodecalculateBonus(), die Kindklassen implementieren müssen. Fügen Sie außerdem einegetSummary()-Methode hinzu, die"[name] earns $[salary] with bonus: $[bonus]"zurückgibt, wobei[bonus]das Ergebnis des Aufrufs voncalculateBonus()ist.Manager.php— Definieren Sie eineManager-Klasse, dieEmployeeerweitert. Binden Sie die Employee-Datei oben ein. Manager erhalten einen prozentualen Bonus. Fügen Sie eine geschützte Eigenschaft$bonusPercentagehinzu. Der Konstruktor sollte Name, Gehalt und Bonusprozentsatz akzeptieren — verwenden Sieparent::__construct()für die ersten beiden und setzen Sie den Prozentsatz dann selbst. Implementieren SiecalculateBonus()so, dass das Gehalt multipliziert mit dem Bonusprozentsatz geteilt durch 100 zurückgegeben wird.Developer.php— Definieren Sie eineDeveloper-Klasse, dieEmployeeerweitert. Binden Sie die Employee-Datei oben ein. Entwickler erhalten einen festen Projektabschlussbonus. Fügen Sie eine geschützte Eigenschaft$projectBonushinzu. Der Konstruktor sollte Name, Gehalt und Projektbonusbetrag akzeptieren — verwenden Sieparent::__construct()für die ersten beiden und setzen Sie den Projektbonus dann selbst. Implementieren SiecalculateBonus()so, dass einfach der feste Projektbonusbetrag zurückgegeben wird.main.php— Binden Sie sowohl die Manager- als auch die Developer-Dateien ein. Sie erhalten fünf Eingaben: Manager-Name, Manager-Gehalt, Manager-Bonusprozentsatz, Entwickler-Name, Entwickler-Gehalt und Entwickler-Projektbonus. Erstellen Sie einenManagerund einenDevelopermit diesen Werten. Geben Sie das Ergebnis des Aufrufs vongetSummary()zuerst für den Manager und dann für den Entwickler aus, jeweils in einer eigenen Zeile.
Diese Herausforderung zeigt, wie abstrakte Klassen einen Vertrag erzwingen — jeder Mitarbeiter muss in der Lage sein, seinen Bonus zu berechnen, aber die Berechnungslogik variiert je nach Rolle. Der Manager verwendet einen Prozentsatz seines Gehalts, während der Developer einen festen Betrag erhält. Die gemeinsame getSummary()-Methode in der Elternklasse arbeitet durch Polymorphismus nahtlos mit beiden Bonusberechnungen zusammen.
Probier es selbst
<?php
require_once 'Manager.php';
require_once 'Developer.php';
// Eingaben lesen
$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: Erstellen Sie ein Manager-Objekt mit den Manager-Eingaben
// TODO: Erstellen Sie ein Developer-Objekt mit den Developer-Eingaben
// TODO: Geben Sie die Zusammenfassung des Managers aus (getSummary())
// TODO: Geben Sie die Zusammenfassung des Developers aus (getSummary())
?>Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas $this-SchlüsselwortMethodenEigenschaftenKonstruktor (__construct)Destruktor (__destruct)Rückblick - Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDas parent:: SchlüsselwortMethoden überschreibenDas final SchlüsselwortAbstrakte KlassenZusammenfassung – Mitarbeiter-Hierarchie7Kapselung
Public, Protected, PrivateZugriffsmodifikatoren im DetailGetter und SetterInformation HidingConstructor Promotion (8.0)Zusammenfassung – Studentenverwaltungssystem2Namensräume & Autoloading
Einführung in NamensräumeDas use-SchlüsselwortPSR-4 Autoloading-StandardComposer AutoloaderZusammenfassung – Organisiertes Projekt5Interfaces & Verträge
Einführung in InterfacesInterfaces implementierenMehrfache Interface-ImplementierungInterface vs. Abstrakte KlasseType Hinting mit InterfacesZusammenfassung – Formen-Rechner8Magische Methoden
Einführung in magische Methoden__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Objekt-Klonen__serialize & __unserializeZusammenfassung - Eigene Collection11Typsystem & Fehlerbehandlung
TypdeklarationenNullable-TypenUnion- & Intersection-TypenException-KlassenEigene Exception-HierarchieTry, Catch, FinallyZusammenfassung - Formular-Validator14Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Klasseneigenschaften
Instanz- vs. statische EigenschaftenKonstanten in KlassenStatische Methoden & EigenschaftenPrivate & geschützte EigenschaftenReadonly-Eigenschaften (PHP 8.1)Zusammenfassung – Bankkonto-Manager6Polymorphismus
Method Overriding erneut betrachtetPolymorphismus über InterfacesType Hinting & Union TypesLate Static BindingZusammenfassung – Payment Processor9Traits
Einführung in TraitsVerwendung mehrerer TraitsKonfliktlösung bei TraitsAbstrakte Methoden in TraitsTraits vs. Vererbung12Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster15Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung