fork download
  1. <?php
  2.  
  3. //Абстрактный класс Employee - сотрудник
  4. abstract class Employee {
  5. // Скрытые свойства класса
  6. protected $payment;
  7. protected $coffee;
  8. protected $paper;
  9. protected $rank;
  10. protected $boss;
  11.  
  12. // Конструктор
  13. // Заполняем ранг
  14. // И является ли сотрудник руководителем
  15. public function __construct($rank, $boss)
  16. {
  17. $this->rank = $rank;
  18. $this->boss = $boss;
  19. $this->recalculationPayment();
  20. }
  21.  
  22. // Метод для перерасчета зарплаты
  23. private function recalculationPayment(){
  24.  
  25. // Получаем все необходимые данные
  26. $isBoss = $this->getBoss();
  27. $rank = $this->getRank();
  28. $payment = $this->getPayment();
  29.  
  30. // Если сотрудник руководитель
  31. // Пересчитываем с дополнительным коэффициентом
  32. if($isBoss)
  33. {
  34. $coffee = $this->getCoffee();
  35. switch($rank)
  36. {
  37. case 1:
  38. {
  39. $this->payment += $payment * 0.5;
  40. break;
  41. }
  42. case 2:
  43. {
  44. $payment += $payment * 0.25;
  45. $payment = $payment + ($payment * 0.5);
  46. $this->payment = $payment;
  47. break;
  48. }
  49. case 3:
  50. {
  51. $payment += $payment * 0.5;
  52. $payment = $payment + ($payment * 0.5);
  53. $this->payment = $payment;
  54. break;
  55. }
  56. default:
  57. break;
  58. }
  59.  
  60. $this->coffee = $coffee * 2;
  61. $this->paper = 0;
  62. }
  63. // Если же нет то
  64. // Перерасчитываем без дополнительного коэффициента
  65. else
  66. {
  67. switch($rank) {
  68. case 2: {
  69. $payment += $payment * 0.25;
  70. $this->payment = $payment;
  71. break;
  72. }
  73. case 3:
  74. {
  75. $payment += $payment * 0.5;
  76. $this->payment = $payment;
  77. break;
  78. }
  79. default:
  80. break;
  81. }
  82. }
  83. }
  84.  
  85. // Методы для доступа к свойствам класса
  86.  
  87. public function getBoss()
  88. {
  89. return $this->boss;
  90. }
  91.  
  92. // Если устанавливаем свойство $boss - руководитель
  93. // то необходимо произвести перерасчет зарплаты
  94. public function setBoss($boss)
  95. {
  96. $this->boss = $boss;
  97. $this->recalculationPayment();
  98. }
  99.  
  100. public function getCoffee()
  101. {
  102. return $this->coffee;
  103. }
  104.  
  105. // Устанавливаем количество кофе литров
  106. // Делаем перерасчет
  107. public function setCoffee($coffee)
  108. {
  109. $this->coffee = $coffee;
  110. $this->recalculationPayment();
  111. }
  112.  
  113. public function getPaper()
  114. {
  115. return $this->paper;
  116. }
  117.  
  118. public function setPaper($paper)
  119. {
  120. $this->paper = $paper;
  121. }
  122.  
  123. public function getPayment()
  124. {
  125. return $this->payment;
  126. }
  127.  
  128. // Устанавливаем зарплату
  129. // Делаем перерасчет
  130. public function setPayment($payment)
  131. {
  132. $this->payment = $payment;
  133. $this->recalculationPayment();
  134. }
  135.  
  136. public function getRank()
  137. {
  138. return $this->rank;
  139. }
  140.  
  141. // Устанавливаем ранг
  142. // Делаем перерасчет
  143. public function setRank($rank)
  144. {
  145. $this->rank = $rank;
  146. $this->recalculationPayment();
  147. }
  148.  
  149.  
  150.  
  151. }
  152.  
  153.  
  154. // Класс Инженер унаследованный от класс Сотрудник
  155. class Engineer extends Employee{
  156.  
  157. // Свойства класса
  158. protected $payment = 200;
  159. protected $coffee = 5;
  160. protected $paper = 50;
  161. }
  162.  
  163.  
  164. $engineer = new Engineer(1, false);
  165. $oldMoney = $engineer->getPayment();
  166. var_dump($oldMoney);
  167.  
  168. // кадровые перестановки
  169. $engineer->setRank(2);
  170. $engineer->setRank(3);
  171. $engineer->setRank(1);
  172.  
  173. $newMoney = $engineer->getPayment();
  174. var_dump($newMoney);
  175.  
  176. assert($oldMoney == $newMoney); // должно выполняться
  177.  
  178.  
  179.  
  180.  
  181.  
Success #stdin #stdout #stderr 0.02s 24448KB
stdin
Standard input is empty
stdout
int(200)
float(375)
stderr
PHP Warning:  assert(): Assertion failed in /home/kKdl9k/prog.php on line 176