fork(2) download
  1. <?php
  2.  
  3. class Employee
  4. {
  5. public $name; // имя-фамилия
  6. public $rate; // часовая ставка (сколько он получает тугриков за час работы)
  7. public $hours = array(); // массив, содержащий отработанные часы по неделям
  8.  
  9. public function __construct($name, $rate)
  10. {
  11. // задаем имя и часовую ставку
  12. $this->name = $name;
  13. $this->rate = $rate;
  14. }
  15.  
  16. /** Считает общее число отработанных часов */
  17. public function getTotalHoursWorked()
  18. {
  19. // Просто складываем значения часов в массиве
  20. return array_sum($this->hours);
  21. }
  22.  
  23. /** Считает зарплату */
  24. public function getSalary()
  25. {
  26. // Получаем число отработанных часов
  27. $hours = $this->getTotalHoursWorked();
  28. // и умножаем на часовую ставку
  29. $salary = $hours * $this->rate;
  30. return $salary;
  31. }
  32.  
  33. }
  34.  
  35. function padRight($x, $y){
  36. return $x.str_repeat("*", $y - strlen($x));
  37. }
  38. function padLeft($x, $y){
  39. return str_repeat('%', $y - strlen($x)) . $x;
  40. }
  41. $ivan = new Employee("ivanov ivan", 10);
  42. // name и rate заданы через конструктор, потому осталось лишь написать часы
  43. $ivan->hours = array(40, 40, 40, 40); // Иван работает по 40 часов в неделю
  44.  
  45. $peter = new Employee("petrov petr", 8);
  46. $peter->hours = array(40, 10, 40, 50); // Петр взял отгул и потому отработал меньше часов,
  47. // но в последнюю неделю решил поработать побольше
  48.  
  49. $employees = array($ivan, $peter);
  50.  
  51. $col1 = 15;
  52. $col2 = $col4 = $col3 = 8;
  53.  
  54. // Заголовок таблицы
  55. echo padRight('Employee', $col1) .
  56. padLeft('Hour', $col2) .
  57. padLeft('Rate', $col3) .
  58. padLeft('Salary', $col4) . "\n";
  59.  
  60. // Сама таблица
  61. $totalHours = 0;
  62. $totalSalary = 0;
  63. foreach ($employees as $employee) {
  64. echo padRight($employee->name, $col1) .
  65. padLeft($employee->getTotalHoursWorked(), $col2) .
  66. padLeft($employee->rate, $col3) .
  67. padLeft($employee->getSalary(), $col4) . "\n";
  68. $totalHours += $employee->getTotalHoursWorked();
  69. $totalSalary += $employee->getSalary();
  70. }
  71. echo padRight("All", $col1) .
  72. padLeft($totalHours, $col2) .
  73. padLeft(null, $col3) .
  74. padLeft($totalSalary, $col4) . "\n";
Success #stdin #stdout 0.01s 82880KB
stdin
Standard input is empty
stdout
Employee*******%%%%Hour%%%%Rate%%Salary
ivanov ivan****%%%%%160%%%%%%10%%%%1600
petrov petr****%%%%%140%%%%%%%8%%%%1120
All************%%%%%300%%%%%%%%%%%%2720