Volanie prepísanej metódy v OOP v PHP

Pri prepisovaní stráca potomok prístup k prepísanej metóde rodiča. Avšak, získať k nej prístup sa napriek tomu dá. Robí sa to pomocou kľúčového slova parent, ktoré ukazuje na rodičovskú triedu.

Pozrime sa na príklad, kedy nám môže byť potrebný prístup k rodičovskej metóde. Predpokladajme, že máme nasledujúcu triedu-rodiča:

php<?php
  class User {
    private $name;
    
    public function setName($name) {
      $this->name = $name;
    }
    public function getName() {
      return $this->name;
    }
  }
?>

Predpokladajme, že sme v triede-potomkovi prepísali metódu rodiča:

php<?php
  class Student extends User {
    public function setName($name) {
      if (strlen($name) > 0) {
        $this->name = $name;
      } else {
        echo 'student name error';
      }
    }
  }
?>

Možno si všimnúť, že v prepísanej metóde pri splnení podmienky sa v podstate vykonáva kód rodičovskej metódy. Vzniká tak zbytočné duplikovanie kódu.

Je sa ho možné zbaviť, ak zavoláme metódu rodiča. Urobme to:

php<?php
  class Student extends User {
    public function setName($name) {
      if (strlen($name) > 0) {
        parent::setName($name); // metóda rodiča
      } else {
        echo 'student name error';
      }
    }
  }
?>
Задание 1

Daný je nasledujúci kód:

php<?php
  class User {
    private $age;
    
    public function setAge($age) {
      if ($age >= 0) {
        $this->age = $age;
      } else {
        echo 'need age more 0';
      }
    }
  }
  
  class Employee extends User {
    public function setAge($age) {
      if ($age <= 120) {
        if ($age >= 0) {
          $this->age = $age;
        } else {
          echo 'need age more 0';
        }
      } else {
        echo 'need age less 120';
      }
    }
  }
?>

V triede Employee opravte zjednodušte setter veku, použite originálnu metódu rodiča.