<pre>
<?php
 
// archive-ipq-co.narod.ru
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 getSalary()
    {
		$hours = ( $this->getNormalHours() * $this->rate ) + ( $this->getOvertimeHours() * $this->rate * 2 );
		return $hours;
    }
	
	/** Укорачиваем имя */
	public function getShortName()
	{
		//получаем полное имя
		$name = $this->name;
		//и заменяем его фамилию и инициалы имени
		return preg_replace("/([а-яё]+)\\s+([а-яё])[а-яё]+/ui", '$1 $2.', $this->name);
	}
	
	/** Подсчитываем стандартные трудочасы */
	public function getNormalHours()
	{
		foreach( $this->hours as $object->$hour ){
			if( $object->$hour <= 40){
				$hours += $object->$hour;
			}else{
				$hours += 40;		// Если часов за неделю больше - добавляет только часы без переработок
			}
		}

		return $hours;
	}
	
	/** Подсчитываем часы переработки */
	public function getOvertimeHours()
	{
		$hours = 0;
		
		foreach( $this->hours as $object->$hour ){
				if($object->$hour > 40){
					$hours += $object->$hour - 40; //вычитаем обычные трудочасы
				}
		}
		
		return $hours;
	}
}
 
	
 
$ivan = new Employee("Иванов Иван", 10);
// name и rate заданы через конструктор, потому осталось лишь написать часы
$ivan->hours = array(40, 40, 40, 40);   // Иван работает по 40 часов в неделю
 
$peter = new Employee("Петров Петр", 8);
$peter->hours = array(40, 10, 40, 50);  // Петр взял отгул и потому отработал меньше часов, 
                                        // но в  последнюю неделю решил поработать побольше
$op = new Employee("Оп Опович", 1000);
$op->hours = array(50, 60, 55, 40);
$employees = array($ivan, $peter, $op);
 
 
function padLeft($string, $length){
   $stringLen = mb_strlen($string);
   //объявляем переменную для пустого пространства
    $space ="";
    for (;$stringLen < $length; $stringLen++){
        $space .= " ";
    }
    echo "$space$string";
 
}
 
function padRight($string, $length){
    $stringLen = mb_strlen($string);
    //объявляем переменную для пустого пространства
    $space ="";
    for (;$stringLen < $length; $stringLen++){
        $space .= " ";
    }
    echo "$string$space";
}
// Ширина колонок
$col1 = 30;
$col2 = 8;
$col3 = 8;
$col4 = 8;
$col5 = 8; // колонка для овертайма
 
// Заголовок таблицы
echo padRight("Сотрудник", $col1) .
     padLeft("Часы", $col2) . 
	 padLeft(" Овертайм", $col5) .
     padLeft("Ставка", $col3) . 
     padLeft("З/п", $col4) . "\n\n";
 
// Сама таблица
foreach ($employees as $employee) {
    echo padRight($employee->getShortName(), $col1) .
         padLeft($employee->getTotalHoursWorked(), $col2) . 
		 padLeft($employee->getOvertimeHours(), $col5) .
         padLeft($employee->rate, $col3) . 
         padLeft($employee->getSalary(), $col4) . "\n";
}

// Подсчет вывода !!! сюда дописать овертайм
foreach ($employees as $employee){
	$hoursSum += $employee->getTotalHoursWorked();
	$overTimeSum += $employee->getOvertimeHours();
	$salarySum += $employee->getSalary();
}

//выписываем вывод !!! сюда дописать овертайм
echo padRight("Всего", $col1) .
	 padLeft($hoursSum, $col2) .
	 padLeft($overTimeSum, $col5) .
	 padLeft(" ", $col3) .
	 padLeft($salarySum, $col4);
?>


</pre>

