<?php
 
class Employee             
{
    public $name;               // имя-фамилия
    public $rate;               // часовая ставка (сколько он получает тугриков за час работы)
    public $hours = array();    // массив, содержащий отработанные часы по неделям  
    public function __construct($name, $rate)
    {
        // задаем имя и часовую ставку
        $this->name = $name;
        $this->rate = $rate;
    }
 
    /** Считает общее число отработанных часов */
    public function getTotalHoursWorked()
    {
        // Просто складываем значения часов в массиве
    }
 
    /** Считает нормальные часы */
    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()
    {
        $overtime = 0;
        foreach ($this->hours as $hoursAWeek) {
	        if ($hoursAWeek > 40) {
	    	    $overtime += ($hoursAWeek - 40);
	        }
        }
        return $overtime;
    }
 
 
    /** Считает зарплату */
    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){
}
function padLeft($x, $y){
}
$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";
				PD9waHAKZXJyb3JfcmVwb3J0aW5nKC0xKTsKCmNsYXNzIEVtcGxveWVlICAgICAgICAgICAgIAp7CiAgICBwdWJsaWMgJG5hbWU7ICAgICAgICAgICAgICAgLy8g0LjQvNGPLdGE0LDQvNC40LvQuNGPCiAgICBwdWJsaWMgJHJhdGU7ICAgICAgICAgICAgICAgLy8g0YfQsNGB0L7QstCw0Y8g0YHRgtCw0LLQutCwICjRgdC60L7Qu9GM0LrQviDQvtC9INC/0L7Qu9GD0YfQsNC10YIg0YLRg9Cz0YDQuNC60L7QsiDQt9CwINGH0LDRgSDRgNCw0LHQvtGC0YspCiAgICBwdWJsaWMgJGhvdXJzID0gYXJyYXkoKTsgICAgLy8g0LzQsNGB0YHQuNCyLCDRgdC+0LTQtdGA0LbQsNGJ0LjQuSDQvtGC0YDQsNCx0L7RgtCw0L3QvdGL0LUg0YfQsNGB0Ysg0L/QviDQvdC10LTQtdC70Y/QvAoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbmFtZSwgJHJhdGUpCiAgICB7CiAgICAgICAgLy8g0LfQsNC00LDQtdC8INC40LzRjyDQuCDRh9Cw0YHQvtCy0YPRjiDRgdGC0LDQstC60YMKICAgICAgICAkdGhpcy0+bmFtZSA9ICRuYW1lOwogICAgICAgICR0aGlzLT5yYXRlID0gJHJhdGU7CiAgICB9CiAKICAgIC8qKiDQodGH0LjRgtCw0LXRgiDQvtCx0YnQtdC1INGH0LjRgdC70L4g0L7RgtGA0LDQsdC+0YLQsNC90L3Ri9GFINGH0LDRgdC+0LIgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUb3RhbEhvdXJzV29ya2VkKCkKICAgIHsKICAgICAgICAvLyDQn9GA0L7RgdGC0L4g0YHQutC70LDQtNGL0LLQsNC10Lwg0LfQvdCw0YfQtdC90LjRjyDRh9Cw0YHQvtCyINCyINC80LDRgdGB0LjQstC1CiAgICAgICAgcmV0dXJuIGFycmF5X3N1bSgkdGhpcy0+aG91cnMpOwogICAgfQogICAgCiAgICAvKiog0KHRh9C40YLQsNC10YIg0L3QvtGA0LzQsNC70YzQvdGL0LUg0YfQsNGB0YsgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROb3JtYWxIb3VycygpIAogICAgewogICAgCSRub3JtYWxIb3VycyA9IDA7CiAgICAJZm9yZWFjaCAoJHRoaXMtPmhvdXJzIGFzICRob3Vyc0FXZWVrKSB7CgkgICAgICAgIGlmICgkaG91cnNBV2VlayA8PSA0MCkgewoJICAgIAkgICAgJG5vcm1hbEhvdXJzICs9ICRob3Vyc0FXZWVrOwoJICAgICAgICB9IAoJICAgICAgICBlbHNlaWYgKCRob3Vyc0FXZWVrID4gNDApIHsKCSAgICAgICAgCSRub3JtYWxIb3VycyArPSAkaG91cnNBV2VlayAtICgkaG91cnNBV2VlayAtIDQwKTsKCSAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJG5vcm1hbEhvdXJzOwogICAgfQogICAgcHVibGljIGZ1bmN0aW9uIGdldE92ZXJ0aW1lSG91cnMoKQogICAgewogICAgICAgICRvdmVydGltZSA9IDA7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmhvdXJzIGFzICRob3Vyc0FXZWVrKSB7CgkgICAgICAgIGlmICgkaG91cnNBV2VlayA+IDQwKSB7CgkgICAgCSAgICAkb3ZlcnRpbWUgKz0gKCRob3Vyc0FXZWVrIC0gNDApOwoJICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAkb3ZlcnRpbWU7CiAgICB9CiAgICAKIAogICAgLyoqINCh0YfQuNGC0LDQtdGCINC30LDRgNC/0LvQsNGC0YMgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTYWxhcnkoKQogICAgewogICAgICAgIC8vINCf0L7Qu9GD0YfQsNC10Lwg0YfQuNGB0LvQviDQvtGC0YDQsNCx0L7RgtCw0L3QvdGL0YUg0YfQsNGB0L7QsgogICAgICAgICRob3VycyA9ICR0aGlzLT5nZXROb3JtYWxIb3VycygpOwogICAgICAgIC8vINC4INGD0LzQvdC+0LbQsNC10Lwg0L3QsCDRh9Cw0YHQvtCy0YPRjiDRgdGC0LDQstC60YMKICAgICAgICAkbm9ybWFsU2FsYXJ5ID0gJGhvdXJzICogJHRoaXMtPnJhdGU7CiAgICAgICAgLy8g0J/QvtC70YPRh9Cw0LXQvCDRh9C40YHQu9C+INC+0YLRgNCw0LHQvtGC0LDQvdC90YvRhSDRh9Cw0YHQvtCyCiAgICAgICAgJG92ZXJ0aW1lID0gJHRoaXMtPmdldE92ZXJ0aW1lSG91cnMoKTsKICAgICAgICAvLyDQuCDRg9C80L3QvtC20LDQtdC8INC90LAg0LTQstC+0LnQvdGD0Y4g0YHRgtCw0LLQutGDCiAgICAgICAgJG92ZXJ0aW1lU2FsYXJ5ID0gJG92ZXJ0aW1lICogKCR0aGlzLT5yYXRlICogMik7CiAgICAgICAgcmV0dXJuICRub3JtYWxTYWxhcnkgKyAkb3ZlcnRpbWVTYWxhcnk7CiAgICB9CiAgICAKfQoKZnVuY3Rpb24gcGFkUmlnaHQoJHgsICR5KXsKICAgIHJldHVybiAkeC5zdHJfcmVwZWF0KCIgIiwgJHkgLSBzdHJsZW4oJHgpKTsKfQpmdW5jdGlvbiBwYWRMZWZ0KCR4LCAkeSl7CiAgICByZXR1cm4gc3RyX3JlcGVhdCgiICIsICR5IC0gc3RybGVuKCR4KSkgLiAkeDsKfQokaXZhbiA9IG5ldyBFbXBsb3llZSgiaXZhbm92IGl2YW4iLCAxMCk7Ci8vIG5hbWUg0LggcmF0ZSDQt9Cw0LTQsNC90Ysg0YfQtdGA0LXQtyDQutC+0L3RgdGC0YDRg9C60YLQvtGALCDQv9C+0YLQvtC80YMg0L7RgdGC0LDQu9C+0YHRjCDQu9C40YjRjCDQvdCw0L/QuNGB0LDRgtGMINGH0LDRgdGLCiRpdmFuLT5ob3VycyA9IGFycmF5KDQwLCA0MCwgNDAsIDQwKTsgICAvLyDQmNCy0LDQvSDRgNCw0LHQvtGC0LDQtdGCINC/0L4gNDAg0YfQsNGB0L7QsiDQsiDQvdC10LTQtdC70Y4KCiRwZXRlciA9IG5ldyBFbXBsb3llZSgicGV0cm92IHBldHIiLCA4KTsKJHBldGVyLT5ob3VycyA9IGFycmF5KDQwLCAxMCwgNDAsIDUwKTsgIC8vINCf0LXRgtGAINCy0LfRj9C7INC+0YLQs9GD0Lsg0Lgg0L/QvtGC0L7QvNGDINC+0YLRgNCw0LHQvtGC0LDQuyDQvNC10L3RjNGI0LUg0YfQsNGB0L7QsiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vINC90L4g0LIgINC/0L7RgdC70LXQtNC90Y7RjiDQvdC10LTQtdC70Y4g0YDQtdGI0LjQuyDQv9C+0YDQsNCx0L7RgtCw0YLRjCDQv9C+0LHQvtC70YzRiNC1CiAKJGVtcGxveWVlcyA9IGFycmF5KCRpdmFuLCAkcGV0ZXIpOwogCiRjb2wxID0gMTU7CiRjb2wyID0gOTsKCi8vINCX0LDQs9C+0LvQvtCy0L7QuiDRgtCw0LHQu9C40YbRiwoJZWNobyBwYWRSaWdodCgnRW1wbG95ZWUnLCAkY29sMSkgLgogICAgICAgICBwYWRMZWZ0KCdIb3VyJywgJGNvbDIpIC4KICAgICAgICAgcGFkTGVmdCgnT3ZlcnRpbWUnLCAkY29sMikgLgogICAgICAgICBwYWRMZWZ0KCdSYXRlJywgJGNvbDIpIC4gCiAgICAgICAgIHBhZExlZnQoJ1NhbGFyeScsICRjb2wyKSAuICJcbiI7CiAgICAgICAgIAovLyDQodCw0LzQsCDRgtCw0LHQu9C40YbQsAokdG90YWxIb3VycyA9IDA7CiR0b3RhbFNhbGFyeSA9IDA7CiR0b3RhbE92ZXJ0aW1lID0gMDsKZm9yZWFjaCAoJGVtcGxveWVlcyBhcyAkZW1wbG95ZWUpIHsKCSAgICAkc2hvcnROYW1lID0gcHJlZ19yZXBsYWNlKCcvKCApKFthLXpdKShbYS16XSspL3VpJywgJyAkMi4nLCAkZW1wbG95ZWUtPm5hbWUpOwogICAgZWNobyBwYWRSaWdodCgkc2hvcnROYW1lLCAkY29sMSkgLgogICAgICAgICBwYWRMZWZ0KCRlbXBsb3llZS0+Z2V0VG90YWxIb3Vyc1dvcmtlZCgpLCAkY29sMikgLiAKICAgICAgICAgcGFkTGVmdCgkZW1wbG95ZWUtPmdldE92ZXJ0aW1lSG91cnMoKSwgJGNvbDIpIC4gCiAgICAgICAgIHBhZExlZnQoJGVtcGxveWVlLT5yYXRlLCAkY29sMikgLiAKICAgICAgICAgcGFkTGVmdCgkZW1wbG95ZWUtPmdldFNhbGFyeSgpLCAkY29sMikgLiAiXG4iOwogICAgICAgICAkdG90YWxIb3VycyArPSAkZW1wbG95ZWUtPmdldFRvdGFsSG91cnNXb3JrZWQoKTsKICAgICAgICAgJHRvdGFsU2FsYXJ5ICs9ICRlbXBsb3llZS0+Z2V0U2FsYXJ5KCk7CiAgICAgICAgICR0b3RhbE92ZXJ0aW1lICs9ICRlbXBsb3llZS0+Z2V0T3ZlcnRpbWVIb3VycygpOwp9CmVjaG8gcGFkUmlnaHQoIkFsbCIsICRjb2wxKSAuCiAgICAgICAgIHBhZExlZnQoJHRvdGFsSG91cnMsICRjb2wyKSAuIAogICAgICAgICBwYWRMZWZ0KCR0b3RhbE92ZXJ0aW1lLCAkY29sMikgLiAKICAgICAgICAgcGFkTGVmdChudWxsLCAkY29sMikgLiAKICAgICAgICAgcGFkTGVmdCgkdG90YWxTYWxhcnksICRjb2wyKSAuICJcbiI7