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(){ $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(){ $coffee = $this->getBasicCoffee(); if ($this->isBoss == 1){ $coffee *= 2; } return $coffee; } public function getPages(){ $pages = $this->getBasicPages(); if ($this->isBoss == 1){ $pages *= 0; } return $pages; } abstract function getBasicSalary(); abstract function getBasicCoffee(); abstract function getBasicPages(); } class Manager extends AbstractWorker{ public function getBasicSalary(){ return 500; } public function getBasicCoffee(){ return 20; } public function getBasicPages(){ return 200; } } class Marketer extends AbstractWorker{ public function getBasicSalary(){ return 400; } public function getBasicCoffee(){ return 15; } public function getBasicPages(){ return 150; } } class Engineer extends AbstractWorker{ public function getBasicSalary(){ return 200; } public function getBasicCoffee(){ return 5; } public function getBasicPages(){ return 50; } } class Analyst extends AbstractWorker{ public function getBasicSalary(){ return 800; } public function getBasicCoffee(){ return 50; } public function getBasicPages(){ return 5; } } class Department{ private $name; private $workers = array(); public function __construct(string $name) { $this->name = $name; } public function addWorker(AbstractWorker $worker){ $this->workers[] = $worker; } public function getNumberWorkers(){ return count($this->workers); } public function getDepartmentSalary(){ $totalSalary = 0; foreach ($this->workers as $worker) { $totalSalary += $worker->getSalary(); } return $totalSalary; } public function getDepartmentCoffee(){ $totalCoffee = 0; foreach ($this->workers as $worker) { $totalCoffee += $worker->getCoffee(); } return $totalCoffee; } public function getDepartmentPages(){ $totalPages = 0; foreach ($this->workers as $worker) { $totalPages += $worker->getPages(); } return $totalPages; } public function getDepartmentName(){ return $this->name; } public function addWorkersToDepartment(string $profession, int $count, int $rang, int $isBoss){ if ($profession == "Manager"){ for ($i = 0; $i < $count; $i++){ $this->addWorker(new Manager($rang, $isBoss)); } } elseif ($profession == "Marketer"){ for ($i = 0; $i < $count; $i++){ $this->addWorker(new Marketer($rang, $isBoss)); } } elseif ($profession == "Engineer"){ for ($i = 0; $i < $count; $i++){ $this->addWorker(new Engineer ($rang, $isBoss)); } } elseif ($profession == "Analyst"){ for ($i = 0; $i < $count; $i++){ $this->addWorker(new Analyst ($rang, $isBoss)); } } } } class Company{ private $departments = array(); public function addDepartment(Department $department){ $this->departments[] = $department; } public function getDepartments(){ return $this->departments; } public function getDepartmentCount(){ return count($this->departments); } } class Tabel{ private function padLeft($value, $columnLength){ echo $value; echo str_repeat(" ", $columnLength - mb_strlen($value)); } private function calculatiotOfOutput(array $informarion){ $col1 = 15; $col2 = 10; $col3 = 10; $col4 = 8; $col5 = 8; $col6 = 15; echo $this->padLeft($informarion["name"], $col1) . $this->padLeft($informarion["count"], $col2) . $this->padLeft($informarion["salary"], $col3) . $this->padLeft($informarion["coffee"], $col4) . $this->padLeft($informarion["pages"], $col5) . $this->padLeft($informarion["salaryDividePages"], $col6) . "\n"; } public function printTabel(Company $company){ $columnName = array("name" => "Департамент", "count" => "сотр.", "salary" => "тугр.", "coffee" => "кофе", "pages" => "стр.", "salaryDividePages" => "тугр./стр."); $this->calculatiotOfOutput($columnName); echo "\n"; $departmentInformation = array("name" => "", "count" => 0, "salary" => 0, "coffee" => 0, "pages" => 0, "salaryDividePages" => 0); foreach ($company->getDepartments() as $department) { $departmentInformation["name"] = $department->getDepartmentName(); $departmentInformation["count"] = $department->getNumberWorkers(); $departmentInformation["salary"] = $department->getDepartmentSalary(); $departmentInformation["coffee"] = $department->getDepartmentCoffee(); $departmentInformation["pages"] = $department->getDepartmentPages(); $departmentInformation["salaryDividePages"] = round($department->getDepartmentSalary() / $department->getDepartmentPages(), 1); $this->calculatiotOfOutput($departmentInformation); } echo "\n"; $totalInformation = array("name" => "Всего", "count" => 0, "salary" => 0, "coffee" => 0, "pages" => 0, "salaryDividePages" => 0); $totalInformation["name"] = "Всего"; foreach ($company->getDepartments() as $department) { $totalInformation["count"] += $department->getNumberWorkers(); $totalInformation["salary"] += $department->getDepartmentSalary(); $totalInformation["coffee"] += $department->getDepartmentCoffee(); $totalInformation["pages"] += $department->getDepartmentPages(); $totalInformation["salaryDividePages"] += round($department->getDepartmentSalary() / $department->getDepartmentPages(), 1); } $this->calculatiotOfOutput($totalInformation); $averageInformation = array("name" => "Среднее", "count" => round($totalInformation["count"] / $company->getDepartmentCount(), 1), "salary" => round($totalInformation["salary"] / $company->getDepartmentCount(), 1), "coffee" => round($totalInformation["coffee"] / $company->getDepartmentCount(), 1), "pages" => round($totalInformation["pages"] / $company->getDepartmentCount(), 1), "salaryDividePages" => round($totalInformation["salaryDividePages"] / $company->getDepartmentCount()), 1); $this->calculatiotOfOutput($averageInformation); } } $vektor = new Company; $tabel = new Tabel; $departmentOfProcurement = new Department("Закупок"); $departmentOfProcurement->addWorkersToDepartment("Manager", 9, 1, 0); $departmentOfProcurement->addWorkersToDepartment("Manager", 3, 2, 0); $departmentOfProcurement->addWorkersToDepartment("Manager", 2, 3, 0); $departmentOfProcurement->addWorkersToDepartment("Marketer", 2, 1, 0); $departmentOfProcurement->addWorkersToDepartment("Manager", 1, 2, 1); $departmentOfSales = new Department("Продаж"); $departmentOfSales->addWorkersToDepartment("Manager", 12, 1, 0); $departmentOfSales->addWorkersToDepartment("Marketer", 6, 1, 0); $departmentOfSales->addWorkersToDepartment("Analyst", 3, 1, 0); $departmentOfSales->addWorkersToDepartment("Analyst", 2, 2, 0); $departmentOfSales->addWorkersToDepartment("Marketer", 1, 2, 1); $departmentOfAdvertising = new Department("Рекламы"); $departmentOfAdvertising->addWorkersToDepartment("Marketer", 15, 1, 0); $departmentOfAdvertising->addWorkersToDepartment("Marketer", 10, 2, 0); $departmentOfAdvertising->addWorkersToDepartment("Manager", 8, 1, 0); $departmentOfAdvertising->addWorkersToDepartment("Engineer", 2, 1, 0); $departmentOfAdvertising->addWorkersToDepartment("Marketer", 1, 3, 1); $departmentOfLogistics = new Department("Логистики"); $departmentOfLogistics->addWorkersToDepartment("Manager", 13, 1, 0); $departmentOfLogistics->addWorkersToDepartment("Manager", 5, 2, 0); $departmentOfLogistics->addWorkersToDepartment("Engineer", 5, 1, 0); $departmentOfLogistics->addWorkersToDepartment("Manager", 1, 1, 1); $vektor->addDepartment($departmentOfProcurement); $vektor->addDepartment($departmentOfSales); $vektor->addDepartment($departmentOfAdvertising); $vektor->addDepartment($departmentOfLogistics); $tabel->printTabel($vektor);
Output for 7.0.0 - 7.0.25, 7.1.0 - 7.1.33, 7.2.6 - 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
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

preferences:
179.17 ms | 403 KiB | 210 Q