Menu
Coddy logo textTech

Zusammenfassung – Mitarbeiter-Hierarchie

Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy — Lektion 26 von 91.

challenge icon

Aufgabe

Einfach

Lassen 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 abstrakte Employee-Klasse, die als Grundlage für alle Mitarbeitertypen dient. Sie sollte die geschützten Eigenschaften $name und $salary haben. Der Konstruktor akzeptiert beide Werte und setzt diese. Fügen Sie eine getName()-Methode hinzu, die den Namen zurückgibt, eine getSalary()-Methode, die das Gehalt zurückgibt, und eine abstrakte Methode calculateBonus(), die Kindklassen implementieren müssen. Fügen Sie außerdem eine getSummary()-Methode hinzu, die "[name] earns $[salary] with bonus: $[bonus]" zurückgibt, wobei [bonus] das Ergebnis des Aufrufs von calculateBonus() ist.
  • Manager.php — Definieren Sie eine Manager-Klasse, die Employee erweitert. Binden Sie die Employee-Datei oben ein. Manager erhalten einen prozentualen Bonus. Fügen Sie eine geschützte Eigenschaft $bonusPercentage hinzu. Der Konstruktor sollte Name, Gehalt und Bonusprozentsatz akzeptieren — verwenden Sie parent::__construct() für die ersten beiden und setzen Sie den Prozentsatz dann selbst. Implementieren Sie calculateBonus() so, dass das Gehalt multipliziert mit dem Bonusprozentsatz geteilt durch 100 zurückgegeben wird.
  • Developer.php — Definieren Sie eine Developer-Klasse, die Employee erweitert. Binden Sie die Employee-Datei oben ein. Entwickler erhalten einen festen Projektabschlussbonus. Fügen Sie eine geschützte Eigenschaft $projectBonus hinzu. Der Konstruktor sollte Name, Gehalt und Projektbonusbetrag akzeptieren — verwenden Sie parent::__construct() für die ersten beiden und setzen Sie den Projektbonus dann selbst. Implementieren Sie calculateBonus() 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 einen Manager und einen Developer mit diesen Werten. Geben Sie das Ergebnis des Aufrufs von getSummary() 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