Menu
Coddy logo textTech

Повторение — иерархия сотрудников

Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy. Урок 26 из 91.

challenge icon

Задание

Легко

Давайте создадим систему иерархии сотрудников, которая объединит все изученные вами в этой главе концепции наследования. Вы создадите abstract базовый class, определяющий, что должно быть у каждого сотрудника, а затем расширите его специализированными типами сотрудников, которые по-разному рассчитывают бонусы.

Вы организуете код в четырех файлах:

  • Employee.php: Define abstract Employee class, который служит основой для всех типов сотрудников. У него должны быть protected properties $name и $salary. constructor accepts оба значения и устанавливает их. Добавьте method getName(), который returns имя, method getSalary(), который returns зарплату, и abstract method calculateBonus(), который дочерние классы должны Implement. Также Add method getSummary(), который returns "[name] earns $[salary] with bonus: $[bonus]", где [bonus] — результат вызова calculateBonus().
  • Manager.php: Define class Manager, который extends Employee. Подключите файл Employee в начале. Менеджеры получают бонус в виде процента. Add protected property $bonusPercentage. constructor должен accepts имя, зарплату и процент бонуса: используйте parent::__construct() для первых двух значений, затем самостоятельно установите процент. Implement calculateBonus(), чтобы он returns зарплату, умноженную на процент бонуса и разделенную на 100.
  • Developer.php: Define class Developer, который extends Employee. Подключите файл Employee в начале. Разработчики получают фиксированный бонус за завершение project. Add protected property $projectBonus. constructor должен accepts имя, зарплату и amount бонуса за project: используйте parent::__construct() для первых двух значений, затем самостоятельно установите бонус за project. Implement calculateBonus(), чтобы он просто returns фиксированный amount бонуса за project.
  • main.php: Подключите оба файла — Manager и Developer. Вы получите шесть inputs: имя manager, зарплата manager, процент бонуса manager, имя developer, зарплата developer и бонус за project developer. Create Manager и Developer с этими значениями. Print результат вызова getSummary() сначала для manager, затем для developer, каждый результат — на отдельной строке.

Это challenge демонстрирует, как abstract classes обеспечивают соблюдение контракта: каждый сотрудник должен уметь рассчитывать свой бонус, но логика расчета различается в зависимости от роли. Manager использует процент от своей зарплаты, а Developer получает фиксированную сумму. Общий method getSummary() в parent class без проблем работает с любым расчетом бонуса благодаря полиморфизму.

Попробуйте сами

<?php
require_once 'Manager.php';
require_once 'Developer.php';

// Читать входные данные
$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: Создать объект Manager с входными данными менеджера

// TODO: Создать объект Developer с входными данными разработчика

// TODO: Вывести сводку менеджера (getSummary())

// TODO: Вывести сводку разработчика (getSummary())
?>

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор PHP