fork(1) download
  1. <?php
  2.  
  3.  
  4. class Company
  5. {
  6. private $departments = array();
  7.  
  8. public function setDepartments($departments)
  9. {
  10. $this->departments = $departments;
  11. }
  12.  
  13. }
  14.  
  15. class Department
  16. {
  17. private $employees = array();
  18.  
  19. public function setEmployees($employees)
  20. {
  21. $this->employees = $employees;
  22. }
  23.  
  24. public function getTotalSalary()
  25. {
  26. $totalSalary = 0;
  27.  
  28. foreach($this->employees as $employee) {
  29. $totalSalary += $employee->getSalary();
  30. }
  31. return $totalSalary;
  32. }
  33.  
  34. public function getTotalDrunkCofee()
  35. {
  36. $totalDrunkCofee = 0;
  37.  
  38. foreach($this->employees as $employee) {
  39. $totalDrunkCofee += $employee->getDrunkCofee();
  40. }
  41. return $totalDrunkCofee;
  42. }
  43. }
  44.  
  45. abstract class AbstractEmployee
  46. {
  47. private $baseRate;
  48. private $rank;
  49. private $isBoss;
  50.  
  51. abstract function getSalary();
  52. abstract function getDrunkCofee();
  53. }
  54.  
  55. class Employee extends AbstractEmployee
  56. {
  57. public function __construct($rank, $isBoss = false)
  58. {
  59. $this->rank = $rank;
  60. $this->isBoss = $isBoss;
  61. }
  62.  
  63. public function getSalary()
  64. {
  65. $salary = 0;
  66.  
  67. if($this->rank == 1) {
  68. $salary = $this->baseRate;
  69. } elseif($this->rank == 2) {
  70. $salary = $this->baseRate * 1.25;
  71. } elseif($this->rank == 3) {
  72. $salary = $this->baseRate * 1.5;
  73. }
  74.  
  75. if($this->isBoss) {
  76. $salary *= 1.5;
  77. }
  78.  
  79. return $salary;
  80. }
  81.  
  82. public function getDrunkCofee()
  83. {
  84. return 'nothing'; //заглушка
  85. }
  86. }
  87.  
  88. class Manager extends Employee
  89. {
  90. protected $baseRate = 500;
  91.  
  92. public function getDrunkCofee()
  93. {
  94. $cofee = 20;
  95.  
  96. if($this->isBoss) {
  97. $cofee *= 2;
  98. }
  99.  
  100. return $cofee;
  101. }
  102. }
  103.  
  104. class Engineer extends Employee
  105. {
  106. protected $baseRate = 200;
  107.  
  108. public function getDrunkCofee()
  109. {
  110. $cofee = 5;
  111.  
  112. if($this->isBoss) {
  113. $cofee *= 2;
  114. }
  115. return $cofee;
  116. }
  117.  
  118. }
  119.  
  120. class Analyst extends Employee
  121. {
  122. protected $baseRate = 800;
  123.  
  124. public function getDrunkCofee()
  125. {
  126. $cofee = 50;
  127.  
  128. if($this->isBoss) {
  129. $cofee *= 2;
  130. }
  131. return $cofee;
  132. }
  133. }
  134.  
  135. class Marketer extends Employee
  136. {
  137. protected $baseRate = 400;
  138.  
  139. public function getDrunkCofee()
  140. {
  141. $cofee = 15;
  142.  
  143. if($this->isBoss) {
  144. $cofee *= 2;
  145. }
  146. return $cofee;
  147. }
  148. }
  149.  
  150.  
  151.  
  152. function controller()
  153. {
  154. $dep1 = new Department;
  155. $emps = array();
  156. for($i = 0; $i <= 9; $i++) {
  157. $emps[] = new Manager(3);
  158. }
  159. $emps[] = new Analyst(2, true);
  160. $dep1->setEmployees($emps);
  161. print_r($dep1);
  162. echo "Всего выдано зп:" . $dep1->getTotalSalary() . "\n";
  163. echo "Всего выпито кофе: " . $dep1->getTotalDrunkCofee() . "\n";
  164. }
  165.  
  166. controller();
  167.  
Success #stdin #stdout 0.01s 52488KB
stdin
Standard input is empty
stdout
Department Object
(
    [employees:Department:private] => Array
        (
            [0] => Manager Object
                (
                    [baseRate:protected] => 500
                    [rank:AbstractEmployee:private] => 
                    [isBoss:AbstractEmployee:private] => 
                    [baseRate:AbstractEmployee:private] => 
                    [rank] => 3
                    [isBoss] => 
                )

            [1] => Manager Object
                (
                    [baseRate:protected] => 500
                    [rank:AbstractEmployee:private] => 
                    [isBoss:AbstractEmployee:private] => 
                    [baseRate:AbstractEmployee:private] => 
                    [rank] => 3
                    [isBoss] => 
                )

            [2] => Manager Object
                (
                    [baseRate:protected] => 500
                    [rank:AbstractEmployee:private] => 
                    [isBoss:AbstractEmployee:private] => 
                    [baseRate:AbstractEmployee:private] => 
                    [rank] => 3
                    [isBoss] => 
                )

            [3] => Manager Object
                (
                    [baseRate:protected] => 500
                    [rank:AbstractEmployee:private] => 
                    [isBoss:AbstractEmployee:private] => 
                    [baseRate:AbstractEmployee:private] => 
                    [rank] => 3
                    [isBoss] => 
                )

            [4] => Manager Object
                (
                    [baseRate:protected] => 500
                    [rank:AbstractEmployee:private] => 
                    [isBoss:AbstractEmployee:private] => 
                    [baseRate:AbstractEmployee:private] => 
                    [rank] => 3
                    [isBoss] => 
                )

            [5] => Manager Object
                (
                    [baseRate:protected] => 500
                    [rank:AbstractEmployee:private] => 
                    [isBoss:AbstractEmployee:private] => 
                    [baseRate:AbstractEmployee:private] => 
                    [rank] => 3
                    [isBoss] => 
                )

            [6] => Manager Object
                (
                    [baseRate:protected] => 500
                    [rank:AbstractEmployee:private] => 
                    [isBoss:AbstractEmployee:private] => 
                    [baseRate:AbstractEmployee:private] => 
                    [rank] => 3
                    [isBoss] => 
                )

            [7] => Manager Object
                (
                    [baseRate:protected] => 500
                    [rank:AbstractEmployee:private] => 
                    [isBoss:AbstractEmployee:private] => 
                    [baseRate:AbstractEmployee:private] => 
                    [rank] => 3
                    [isBoss] => 
                )

            [8] => Manager Object
                (
                    [baseRate:protected] => 500
                    [rank:AbstractEmployee:private] => 
                    [isBoss:AbstractEmployee:private] => 
                    [baseRate:AbstractEmployee:private] => 
                    [rank] => 3
                    [isBoss] => 
                )

            [9] => Manager Object
                (
                    [baseRate:protected] => 500
                    [rank:AbstractEmployee:private] => 
                    [isBoss:AbstractEmployee:private] => 
                    [baseRate:AbstractEmployee:private] => 
                    [rank] => 3
                    [isBoss] => 
                )

            [10] => Analyst Object
                (
                    [baseRate:protected] => 800
                    [rank:AbstractEmployee:private] => 
                    [isBoss:AbstractEmployee:private] => 
                    [baseRate:AbstractEmployee:private] => 
                    [rank] => 2
                    [isBoss] => 1
                )

        )

)
Всего выдано зп:9000
Всего выпито кофе: 300