<?php class Company { public function setDepartments($departments) { $this->departments = $departments; } } class Department { public function setEmployees($employees) { $this->employees = $employees; } public function getTotalSalary() { $totalSalary = 0; foreach($this->employees as $employee) { $totalSalary += $employee->getSalary(); } return $totalSalary; } public function getTotalDrunkCofee() { $totalDrunkCofee = 0; foreach($this->employees as $employee) { $totalDrunkCofee += $employee->getDrunkCofee(); } return $totalDrunkCofee; } } abstract class AbstractEmployee { private $baseRate; private $rank; private $isBoss; abstract function getSalary(); abstract function getDrunkCofee(); } class Employee extends AbstractEmployee { public function __construct($rank, $isBoss = false) { $this->rank = $rank; $this->isBoss = $isBoss; } public function getSalary() { $salary = 0; if($this->rank == 1) { $salary = $this->baseRate; } elseif($this->rank == 2) { $salary = $this->baseRate * 1.25; } elseif($this->rank == 3) { $salary = $this->baseRate * 1.5; } if($this->isBoss) { $salary *= 1.5; } return $salary; } public function getDrunkCofee() { return 'nothing'; //заглушка } } class Manager extends Employee { protected $baseRate = 500; public function getDrunkCofee() { $cofee = 20; if($this->isBoss) { $cofee *= 2; } return $cofee; } } class Engineer extends Employee { protected $baseRate = 200; public function getDrunkCofee() { $cofee = 5; if($this->isBoss) { $cofee *= 2; } return $cofee; } } class Analyst extends Employee { protected $baseRate = 800; public function getDrunkCofee() { $cofee = 50; if($this->isBoss) { $cofee *= 2; } return $cofee; } } class Marketer extends Employee { protected $baseRate = 400; public function getDrunkCofee() { $cofee = 15; if($this->isBoss) { $cofee *= 2; } return $cofee; } } function controller() { $dep1 = new Department; for($i = 0; $i <= 9; $i++) { $emps[] = new Manager(3); } $emps[] = new Analyst(2, true); $dep1->setEmployees($emps); echo "Всего выдано зп:" . $dep1->getTotalSalary() . "\n"; echo "Всего выпито кофе: " . $dep1->getTotalDrunkCofee() . "\n"; } controller();
Standard input is empty
Department Object ( [employees:Department:private] => Array ( [0] => Manager Object ( [baseRate:protected] => 500 [rank:AbstractEmployee:private] => [isBoss:AbstractEmployee:private] => [baseRate:AbstractEmployee:private] => [rank] => 3 [isBoss] => ) [1] => Manager Object ( [baseRate:protected] => 500 [rank:AbstractEmployee:private] => [isBoss:AbstractEmployee:private] => [baseRate:AbstractEmployee:private] => [rank] => 3 [isBoss] => ) [2] => Manager Object ( [baseRate:protected] => 500 [rank:AbstractEmployee:private] => [isBoss:AbstractEmployee:private] => [baseRate:AbstractEmployee:private] => [rank] => 3 [isBoss] => ) [3] => Manager Object ( [baseRate:protected] => 500 [rank:AbstractEmployee:private] => [isBoss:AbstractEmployee:private] => [baseRate:AbstractEmployee:private] => [rank] => 3 [isBoss] => ) [4] => Manager Object ( [baseRate:protected] => 500 [rank:AbstractEmployee:private] => [isBoss:AbstractEmployee:private] => [baseRate:AbstractEmployee:private] => [rank] => 3 [isBoss] => ) [5] => Manager Object ( [baseRate:protected] => 500 [rank:AbstractEmployee:private] => [isBoss:AbstractEmployee:private] => [baseRate:AbstractEmployee:private] => [rank] => 3 [isBoss] => ) [6] => Manager Object ( [baseRate:protected] => 500 [rank:AbstractEmployee:private] => [isBoss:AbstractEmployee:private] => [baseRate:AbstractEmployee:private] => [rank] => 3 [isBoss] => ) [7] => Manager Object ( [baseRate:protected] => 500 [rank:AbstractEmployee:private] => [isBoss:AbstractEmployee:private] => [baseRate:AbstractEmployee:private] => [rank] => 3 [isBoss] => ) [8] => Manager Object ( [baseRate:protected] => 500 [rank:AbstractEmployee:private] => [isBoss:AbstractEmployee:private] => [baseRate:AbstractEmployee:private] => [rank] => 3 [isBoss] => ) [9] => Manager Object ( [baseRate:protected] => 500 [rank:AbstractEmployee:private] => [isBoss:AbstractEmployee:private] => [baseRate:AbstractEmployee:private] => [rank] => 3 [isBoss] => ) [10] => Analyst Object ( [baseRate:protected] => 800 [rank:AbstractEmployee:private] => [isBoss:AbstractEmployee:private] => [baseRate:AbstractEmployee:private] => [rank] => 2 [isBoss] => 1 ) ) ) Всего выдано зп:9000 Всего выпито кофе: 300