<?php
abstract class Employee {
const MANAGER = "Manager";
const MARKETER = "Marketer";
const ENGINEER = "Engineer";
const ANALYST = "Analyst";
protected int $grade;
protected bool $chief;
public function __construct(int $grade, bool $chief = false) {
$this->grade = $grade;
$this->chief = $chief;
}
public function getBaseRate() {
return $this->baseRate;
}
public function getActualPay() {
$rate = $this->getBaseRate();
if ($this->grade == 2) {
$rate *= 1.25;
} elseif ($this->grade == 3) {
$rate = $rate * 1.5;
}
return $this->chief ? $rate * 2 : $rate;
}
public function getBaseCoffeeConsumption() {
return $this->baseCoffeeConsumption;
}
public function getActualCoffeeConsumption() {
return $this->chief ? $this->getBaseCoffeeConsumption() * 2 : $this->getBaseCoffeeConsumption();
}
public function getBasePaperworkProduced() {
return $this->basePaperworkProduced;
}
public function getActualPaperworkProduced(): int {
return $this->chief ? 0 : $this->getBasePaperworkProduced();
}
}
class Manager extends Employee {
protected $baseRate = 500;
protected $baseCoffeeConsumption = 20;
protected int $basePaperworkProduced = 200;
}
class Marketer extends Employee {
protected $baseRate = 400;
protected $baseCoffeeConsumption = 15;
protected int $basePaperworkProduced = 150;
}
class Engineer extends Employee {
protected $baseRate = 200;
protected $baseCoffeeConsumption = 5;
protected int $basePaperworkProduced = 50;
}
class Analyst extends Employee {
protected $baseRate = 800;
protected $baseCoffeeConsumption = 50;
protected int $basePaperworkProduced = 5;
}