<?php
error_reporting(-1);

class Employee             
{
    public $name;               // имя-фамилия
    public $rate;               // часовая ставка (сколько он получает тугриков за час работы)
    public $hours = array();    // массив, содержащий отработанные часы по неделям

    public function __construct($name, $rate)
    {
        // задаем имя и часовую ставку
        $this->name = $name;
        $this->rate = $rate;
    }
 
    /** Считает общее число отработанных часов */
    public function getTotalHoursWorked()
    {
        // Просто складываем значения часов в массиве
        return array_sum($this->hours);
    }
    
    /** Считает нормальные часы */
    public function getNormalHours() 
    {
    	$normalHours = 0;
    	foreach ($this->hours as $hoursAWeek) {
	        if ($hoursAWeek <= 40) {
	    	    $normalHours += $hoursAWeek;
	        } 
	        elseif ($hoursAWeek > 40) {
	        	$normalHours += $hoursAWeek - ($hoursAWeek - 40);
	        }
        }
        return $normalHours;
    }
    public function getOvertimeHours()
    {
    	return $this->getTotalHoursWorked() - $this->getNormalHours();
    }
 
    /** Считает зарплату */
    public function getSalary()
    {
        // Получаем число отработанных часов
        $hours = $this->getNormalHours();
        // и умножаем на часовую ставку
        $normalSalary = $hours * $this->rate;
        // Получаем число отработанных часов
        $overtime = $this->getOvertimeHours();
        // и умножаем на двойную ставку
        $overtimeSalary = $overtime * ($this->rate * 2);
        return $normalSalary + $overtimeSalary;
    }
    
}

function padRight($x, $y){
    return $x.str_repeat(" ", $y - strlen($x));
}
function padLeft($x, $y){
    return str_repeat(" ", $y - strlen($x)) . $x;
}
$ivan = new Employee("ivanov ivan", 10);
// name и rate заданы через конструктор, потому осталось лишь написать часы
$ivan->hours = array(40, 40, 40, 40);   // Иван работает по 40 часов в неделю

$peter = new Employee("petrov petr", 8);
$peter->hours = array(40, 10, 40, 50);  // Петр взял отгул и потому отработал меньше часов, 
                                       // но в  последнюю неделю решил поработать побольше
 
$employees = array($ivan, $peter);
 
$col1 = 15;
$col2 = 9;

// Заголовок таблицы
	echo padRight('Employee', $col1) .
         padLeft('Hour', $col2) .
         padLeft('Overtime', $col2) .
         padLeft('Rate', $col2) . 
         padLeft('Salary', $col2) . "\n";
         
// Сама таблица
$totalHours = 0;
$totalSalary = 0;
$totalOvertime = 0;
foreach ($employees as $employee) {
	    $shortName = preg_replace('/( )([a-z])([a-z]+)/ui', ' $2.', $employee->name);
    echo padRight($shortName, $col1) .
         padLeft($employee->getTotalHoursWorked(), $col2) . 
         padLeft($employee->getOvertimeHours(), $col2) . 
         padLeft($employee->rate, $col2) . 
         padLeft($employee->getSalary(), $col2) . "\n";
         $totalHours += $employee->getTotalHoursWorked();
         $totalSalary += $employee->getSalary();
         $totalOvertime += $employee->getOvertimeHours();
}
echo padRight("All", $col1) .
         padLeft($totalHours, $col2) . 
         padLeft($totalOvertime, $col2) . 
         padLeft(null, $col2) . 
         padLeft($totalSalary, $col2) . "\n";