fork download
  1. <?php
  2.  
  3. class Worker {
  4. // An array with workers
  5. protected $workers = array(
  6. 'engineer' => array(
  7. 'salary' => 100
  8. ),
  9.  
  10. 'marketer' => array(
  11. 'salary' => 200
  12. )
  13. );
  14.  
  15. // An array of worker params
  16. protected $current_worker;
  17.  
  18. /**
  19.   * Worker constructor.
  20.   */
  21. public function __construct( $job_title = 'marketer' ) {
  22. // Check if such position exists
  23. if ( array_key_exists( $job_title, $this->workers ) ) {
  24. // Assign job title
  25. $this->current_worker = $this->workers[$job_title];
  26. } else {
  27. throw new Exception( 'Passed job title does not exist!' );
  28. }
  29. }
  30.  
  31. /**
  32.   * Getter for worker salary
  33.   */
  34. public function get_worker_salary() {
  35. // Check if salary key exists
  36. if ( array_key_exists( 'salary', $this->current_worker ) ) {
  37. return $this->current_worker['salary'];
  38. } else {
  39. return false;
  40. }
  41. }
  42. /**
  43.   * Setter for worker salary???
  44.   * Обратите внимание сюда пожалуйста!
  45.   */
  46. public function setWorkerNewSalary(int $newSalary) {
  47. // и как мне работать с твоим классом теперь???
  48. // Окей, разобрался, но выглядит всё равно не очень очевидно для меня :(
  49. $this->current_worker['salary'] = $newSalary;
  50.  
  51. }
  52.  
  53. }
  54.  
  55. $Vasya = new Worker( 'engineer' );
  56.  
  57.  
  58. var_dump($Vasya);
  59. //и вижу что объект жирный и в итоге вместо сотни потенциальных классов
  60. // будет туча жирнючих объектов в каждом из которых хранится инфа по сути
  61. // предназдаченная для класса, разве классы это не шаблоны?
  62. // зачем хранить шаблоны в самих объектах?
  63.  
  64.  
  65. $Vasya->setWorkerNewSalary(300);
  66.  
  67. var_dump($Vasya);
Success #stdin #stdout 0.01s 82880KB
stdin
Standard input is empty
stdout
    object(Worker)#1 (2) {
  ["workers":protected]=>
  array(2) {
    ["engineer"]=>
    array(1) {
      ["salary"]=>
      int(100)
    }
    ["marketer"]=>
    array(1) {
      ["salary"]=>
      int(200)
    }
  }
  ["current_worker":protected]=>
  array(1) {
    ["salary"]=>
    int(100)
  }
}
object(Worker)#1 (2) {
  ["workers":protected]=>
  array(2) {
    ["engineer"]=>
    array(1) {
      ["salary"]=>
      int(100)
    }
    ["marketer"]=>
    array(1) {
      ["salary"]=>
      int(200)
    }
  }
  ["current_worker":protected]=>
  array(1) {
    ["salary"]=>
    int(300)
  }
}