3v4l.org

run code in 300+ PHP versions simultaneously
<?php error_reporting(-1); abstract class AbstractWorker { public $rank; public $isBoss; public function __construct(int $rank, int $isBoss) { $this->rank = $rank; $this->isBoss = $isBoss; } public function getSalary(): float { $salary = $this->getBasicSalary(); if ($this->rank == 2){ $salary *= 1.25; } elseif ($this->rank == 3){ $salary *= 1.5; } if ($this->isBoss == 1){ $salary *= 1.5; } return $salary; } public function getCoffee(): int { $coffee = $this->getBasicCoffee(); if ($this->isBoss == 1){ $coffee *= 2; } return $coffee; } public function getPages(): int { $pages = $this->getBasicPages(); if ($this->isBoss == 1){ $pages = 0; } return $pages; } abstract public function getBasicSalary(): int; abstract public function getBasicCoffee(): int; abstract public function getBasicPages(): int; } class Manager extends AbstractWorker { public function getBasicSalary(): int { return 500; } public function getBasicCoffee(): int { return 20; } public function getBasicPages(): int { return 200; } } class Marketer extends AbstractWorker { public function getBasicSalary(): int { return 400; } public function getBasicCoffee(): int { return 15; } public function getBasicPages(): int { return 150; } } class Engineer extends AbstractWorker { public function getBasicSalary(): int { return 200; } public function getBasicCoffee(): int { return 5; } public function getBasicPages(): int { return 50; } } class Analyst extends AbstractWorker { public function getBasicSalary(): int { return 800; } public function getBasicCoffee(): int { return 50; } public function getBasicPages(): int { return 5; } } class Department { private $name; private $workers = array(); public function __construct(string $name) { $this->name = $name; } public function addWorker(AbstractWorker $worker): void { $this->workers[] = $worker; } public function getNumberWorkers(): int { return count($this->workers); } public function getDepartmentSalary(): float { $totalSalary = 0; foreach ($this->workers as $worker) { $totalSalary += $worker->getSalary(); } return $totalSalary; } public function getDepartmentCoffee(): int { $totalCoffee = 0; foreach ($this->workers as $worker) { $totalCoffee += $worker->getCoffee(); } return $totalCoffee; } public function getDepartmentPages(): int { $totalPages = 0; foreach ($this->workers as $worker) { $totalPages += $worker->getPages(); } return $totalPages; } public function getDepartmentName(): string { return $this->name; } public function getWorkers(): array { return $this->workers; } public function getWorker(int $number): AbstractWorker { return $this->workers[$number]; } public function deleteWorker(int $number): void { unset($this->workers[$number]); } public function sortWorkers(): void { sort($this->workers); } } class Company { private $departments = array(); public function addDepartment(Department $department): void { $this->departments[] = $department; } public function getDepartments(): array { return $this->departments; } public function getDepartmentCount(): int { return count($this->departments); } } class Tabel { private function padLeft($value, $columnLength): void { echo $value; echo str_repeat(" ", $columnLength - mb_strlen($value)); } private function printRow(string $name, $count, $salary, $coffee, $pages, $salaryDividePages): void { $col1 = 15; $col2 = 10; $col3 = 10; $col4 = 8; $col5 = 8; $col6 = 15; echo $this->padLeft($name, $col1) . $this->padLeft($count, $col2) . $this->padLeft($salary, $col3) . $this->padLeft($coffee, $col4) . $this->padLeft($pages, $col5) . $this->padLeft($salaryDividePages, $col6) . "\n"; } public function printTabel(Company $company): void { $this->printRow("Департамент", "сотр.", "тугр.", "кофе", "стр", "тугр./стр."); echo "\n"; foreach ($company->getDepartments() as $department) { $this->printRow($department->getDepartmentName(), $department->getNumberWorkers(), $department->getDepartmentSalary(), $department->getDepartmentCoffee(), $department->getDepartmentPages(), round($department->getDepartmentSalary() / $department->getDepartmentPages(), 1)); } echo "\n"; $count = 0; $salary = 0; $coffee = 0; $pages = 0; $salaryDividePages = 0; foreach ($company->getDepartments() as $department) { $count += $department->getNumberWorkers(); $salary += $department->getDepartmentSalary(); $coffee += $department->getDepartmentCoffee(); $pages += $department->getDepartmentPages(); $salaryDividePages += round($salary / $pages, 1); } $this->printRow("Всего", $count, $salary, $coffee, $pages, $salaryDividePages); $this->printRow("Среднее", round($count / $company->getDepartmentCount(), 1), round($salary / $company->getDepartmentCount(), 1), round($coffee / $company->getDepartmentCount(), 1), round($pages / $company->getDepartmentCount(), 1), round($salaryDividePages / $company->getDepartmentCount(), 1)); } } class HiringWorkers { public function addWorkersToDepartment(Department $department, string $profession, int $count, int $rang, int $isBoss): void { if ($profession == Manager::class){ for ($i = 0; $i < $count; $i++){ $department->addWorker(new Manager($rang, $isBoss)); } } elseif ($profession == Marketer::class){ for ($i = 0; $i < $count; $i++){ $department->addWorker(new Marketer($rang, $isBoss)); } } elseif ($profession == Engineer::class){ for ($i = 0; $i < $count; $i++){ $department->addWorker(new Engineer ($rang, $isBoss)); } } elseif ($profession == Analyst::class){ for ($i = 0; $i < $count; $i++){ $department->addWorker(new Analyst ($rang, $isBoss)); } } } } $vektor = new Company; $tabel = new Tabel; $hiringWorkers = new HiringWorkers; $departmentOfProcurement = new Department("Закупок"); $hiringWorkers->addWorkersToDepartment($departmentOfProcurement, "Manager", 9, 1, 0); $hiringWorkers->addWorkersToDepartment($departmentOfProcurement, "Manager", 3, 2, 0); $hiringWorkers->addWorkersToDepartment($departmentOfProcurement, "Manager", 2, 3, 0); $hiringWorkers->addWorkersToDepartment($departmentOfProcurement, "Marketer", 2, 1, 0); $hiringWorkers->addWorkersToDepartment($departmentOfProcurement, "Manager", 1, 2, 1); $departmentOfSales = new Department("Продаж"); $hiringWorkers->addWorkersToDepartment($departmentOfSales, "Manager", 12, 1, 0); $hiringWorkers->addWorkersToDepartment($departmentOfSales, "Marketer", 6, 1, 0); $hiringWorkers->addWorkersToDepartment($departmentOfSales, "Analyst", 3, 1, 0); $hiringWorkers->addWorkersToDepartment($departmentOfSales, "Analyst", 2, 2, 0); $hiringWorkers->addWorkersToDepartment($departmentOfSales, "Marketer", 1, 2, 1); $departmentOfAdvertising = new Department("Рекламы"); $hiringWorkers->addWorkersToDepartment($departmentOfAdvertising, "Marketer", 15, 1, 0); $hiringWorkers->addWorkersToDepartment($departmentOfAdvertising, "Marketer", 10, 2, 0); $hiringWorkers->addWorkersToDepartment($departmentOfAdvertising, "Manager", 8, 1, 0); $hiringWorkers->addWorkersToDepartment($departmentOfAdvertising, "Engineer", 2, 1, 0); $hiringWorkers->addWorkersToDepartment($departmentOfAdvertising, "Marketer", 1, 3, 1); $departmentOfLogistics = new Department("Логистики"); $hiringWorkers->addWorkersToDepartment($departmentOfLogistics, "Manager", 13, 1, 0); $hiringWorkers->addWorkersToDepartment($departmentOfLogistics, "Manager", 5, 2, 0); $hiringWorkers->addWorkersToDepartment($departmentOfLogistics, "Engineer", 5, 1, 0); $hiringWorkers->addWorkersToDepartment($departmentOfLogistics, "Manager", 1, 1, 1); $vektor->addDepartment($departmentOfProcurement); $vektor->addDepartment($departmentOfSales); $vektor->addDepartment($departmentOfAdvertising); $vektor->addDepartment($departmentOfLogistics); $tabel->printTabel($vektor);
Output for 7.1.0 - 7.1.25, 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.4, 8.3.6
Департамент сотр. тугр. кофе стр тугр./стр. Закупок 17 9612.5 350 3100 3.1 Продаж 24 13550 610 3325 4.1 Рекламы 36 16300 575 5450 3 Логистики 24 11375 425 3850 3 Всего 101 50837.5 1960 15725 13.2 Среднее 25.3 12709.4 490 3931.3 3.3
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 Департамент сотр. тугр. кофе стр тугр./стр. Закупок 17 9612.5 350 3100 3.1 Продаж 24 13550 610 3325 4.1 Рекламы 36 16300 575 5450 3 Логистики 24 11375 425 3850 3 Всего 101 50837.5 1960 15725 13.2 Среднее 25.3 12709.4 490 3931.3 3.3
Output for 7.0.0 - 7.0.25
Fatal error: Uncaught TypeError: Return value of Department::addWorker() must be an instance of void, none returned in /in/QfVAk:145 Stack trace: #0 /in/QfVAk(304): Department->addWorker(Object(Manager)) #1 /in/QfVAk(327): HiringWorkers->addWorkersToDepartment(Object(Department), 'Manager', 9, 1, 0) #2 {main} thrown in /in/QfVAk on line 145
Process exited with code 255.

preferences:
227.91 ms | 401 KiB | 196 Q