3v4l.org

run code in 300+ PHP versions simultaneously
<?php header("Content-Type: text/plain; charset=utf-8"); class Departament { public $name; public $employees = []; public function __construct($name) { $this->name = $name; } public function getEmpolyees($position, $rank, $boss, $quantity) { For ($i=1; $i<=$quantity; $i++) { $this->employees[] = new $position($rank, $boss); } } public function countEmployees() //число сотрудников в департаменте { $countEmployees=0; foreach ($this->employees as $employee) { $countEmployees++; } return $countEmployees; } public function getSalaryDep() //суммарная зарплата работников { $countSalaryDep=0; foreach ($this->employees as $employee) { $countSalaryDep+=$employee->getSalary(); } return $countSalaryDep; } public function getCoffeeDep() //потребляемое кофе всеми сотрудниками депа { $countCoffee = 0; foreach ($this->employees as $employee) { $countCoffee+= $employee->getCoffee(); } return $countCoffee; } public function getPageDep() //Число страниц документов и отчетов, которые производит этот департамент { $countPage = 0; foreach ($this->employees as $employee) { $countPage+= $employee->getPage(); } return $countPage; } public function getAverageTugPerPage() //Посчитать средний расход тугриков на одну страницу { $average = $this->getPageDep() / $this->getSalaryDep(); return $average; } public function calculateall() //Произвести все расчеты и вывести на экран. { $countEmployees = 0; $salary = 0; $countCoffee = 0; $countPage = 0; $average = 0; echo "Название департамента: {$this->name}\n"; $countEmployees = $this->countEmployees(); echo "Кол-во сотрудников : {$countEmployees}\n"; $salary=round($this->getSalaryDep()); // echo "Зп по этому департаменту = {$salary}\n"; $countCoffee= $this->getCoffeeDep(); echo "Кол-во выпитого коффе = {$countCoffee}\n"; $countPage = $this->getPageDep(); echo "Всего страниц этого депа: {$countPage}\n"; $average = round($this->getAverageTugPerPage(),2); echo "Cредний расход тугриков на одну страницу {$average}\n\n\n"; } } abstract Class Employee { public $coffe; public $page; public $baseSalary; public $rank; public $boss = false; public $quantity; public function __construct($rank, $boss) { $this->rank = $rank; $this->boss = $boss; } public function getSalary() //Посчитать зарплату отдельного работника с учётом ранга. Возвращает зарплату. { $salary = $this->baseSalary; switch($this->rank) { case 1: $salary = $salary;//Ранг 1, зп по дефолту break; case 2: $salary = $salary + ($salary)*25/100; //Ранг 2, прибавляем к з/п 25% break; case 3: $salary = $salary + ($salary)*50/100;//Ранг 3, прибавляем к з/п 50% break; default: echo "Неверно задан ранг."; } If ($this->boss) $salary=$salary + ($salary)*50/100; //Босс, прибавляем к з/п 50%(+за ранг отдельно накидывается) return $salary; } public function getCoffee()//Сколько кофе выпили сотрудники. Босс пьёт в два раза больше. { $coffee=$this->coffee; If ($this->boss) $coffee=$this->coffee*2; return $coffee; } public function getPage() // Страницы одного сотрудника. Босс = 0; { $page=$this->page; If ($this->boss) $page=0; return $page; } } Class Manager extends Employee { public $coffee = 20; public $page = 200; public $baseSalary = 500; } Class Marketer extends Employee { public $coffee = 15; public $page = 150; public $baseSalary = 400; } Class Engineer extends Employee { public $coffee = 5; public $page = 50; public $baseSalary = 200; } Class Analyst extends Employee { public $coffee = 50; public $page = 5; public $baseSalary = 800; } $allDep = []; $sumDep = []; $allDep[]=$procurementDep = new Departament("Procurement"); //Позиция, Ранг, босс, кол-во $procurementDep->getEmpolyees("Manager", 1, false, 9);// 9 менеджеров 1 ранга. $procurementDep->getEmpolyees("Manager",2, false, 3);//3 менеджера 2 ранга; $procurementDep->getEmpolyees("Manager",3, false, 2);// 2 менеджера 3 ранга; $procurementDep->getEmpolyees("Marketer", 1, false, 2);//2 маркетолога 1 ранга $procurementDep->getEmpolyees("Manager",2, true, 1);// Босс 2 ранга ме. $procurementDep->calculateall(); $allDep[]=$salesDep = new Departament("Sales"); $salesDep->getEmpolyees("Manager", 1, false, 12);// 12 менеджеров 1 ранга. $salesDep->getEmpolyees("Marketer", 1, false, 6);//6 маркетолога 1 ранга $salesDep->getEmpolyees("Analyst", 1, false, 3);//3 аналитика 1 ранга $salesDep->getEmpolyees("Analyst", 2, false, 2);//2 аналитика 1 ранга $salesDep->getEmpolyees("Marketer", 2, true, 1);//1 маркетолога 2 ранга boss $salesDep->calculateall(); $allDep[]=$advertisingDep = new Departament("Advertising"); $advertisingDep->getEmpolyees("Marketer", 1, false, 15);//15 маркетолога 1 ранга $advertisingDep->getEmpolyees("Marketer", 2, false, 10);//10 маркетолога 2 ранга $advertisingDep->getEmpolyees("Manager", 1, false, 8);// 8 менеджеров 1 ранга. $advertisingDep->getEmpolyees("Engineer", 1, false, 2);//2 инженера 1 ранга $advertisingDep->getEmpolyees("Marketer", 3, true, 1);//1 маркетолога 3 ранга boss $advertisingDep->calculateall(); $allDep[]=$logisticsDep = new Departament("logistics"); $logisticsDep->getEmpolyees("Manager", 1, false, 13);// 13 менеджеров 1 ранга. $logisticsDep->getEmpolyees("Manager", 2, false, 5);// 5 менеджеров 2 ранга. $logisticsDep->getEmpolyees("Engineer", 1, false, 5);//5 инженера 1 ранга $logisticsDep->getEmpolyees("Manager", 1, true, 1);// 1 менеджеров 1 ранга. boss $logisticsDep->calculateall(); function getSumDep($allDep) //Посчитать в сумме зарплаты/кофе/страницы всех департаментов. { $sumDep = []; foreach ($allDep as $dep) { $sumDep['allDepSalary']+=$dep->getSalaryDep(); $sumDep['allDepCoffee']+=$dep->getCoffeeDep(); $sumDep['allDepPage']+=$dep->getPageDep(); } return $sumDep; } $sumDep=getSumDep($allDep); foreach ($sumDep as $value) { echo "$value\n"; } ?>

preferences:
25.03 ms | 405 KiB | 5 Q